جعل السترينغ يقبل اكثر من 255 حرف
#1
السلام عليكم
عندي مشكلة عند ارسال نصوص تفوق 255 حرف لا يعمل البرنامج عدلت الكود الى هكذا لكن لم يعد يعمل جيدا فكيف يمكنني جعل السترينغ يقبل اكثر من 255 بدون عمل midstr للتكست الموجود في memo1
type
  TSettings = record
    mystring:array [1..900] of string;

هذه هي الوحدة المستعملة

unit shared;
interface
uses
Windows;
type
TSettings = record
msgConfusedtring[255];
end;
PSettings = ^TSettings;
const
RC_SETTINGS = 'CFG';
function WriteSettings(Filename: PChar; Settings: PSettings): Boolean;
function ReadSettings(var Settings: PSettings): Boolean;
implementation
function WriteSettings(Filename: PChar; Settings: PSettings): Boolean;
var
hResource: Thandle;
begin
Result := False;
hResource := BeginUpdateResource(Filename, False);
if hResource <> 0 then
begin
if UpdateResource(hResource, RT_RCDATA, RC_SETTINGS, 0, Settings, SizeOf(Settings^)) then
Result := True;
EndUpdateResource(hResource, False);
end;
end;
function ReadSettings(var Settings: PSettings): Boolean;
var
hResInfo: HRSRC;
hRes: HGLOBAL;
begin
Result := False;
hResInfo := FindResource(hInstance, RC_SETTINGS, RT_RCDATA);
if hResInfo <> 0 then
begin
hRes := LoadResource(hInstance, hResInfo);
if hRes <> 0 then
begin
Settings := LockResource(hRes);
Result := True;
end;
end;
end;
end.
الرد
#2
وعليكم السلام
كود :
unit shared; interface uses  Windows; type  TSettings = record    Msg: string;  end;  PSettings = ^TSettings; const  RC_SETTINGS = 'CFG'; function WriteSettings(Filename: PChar; Settings: PSettings): Boolean; function ReadSettings(var Settings: PSettings): Boolean; implementation function WriteSettings(Filename: PChar; Settings: PSettings): Boolean; var  hResource: Thandle; begin  Result := False;  hResource := BeginUpdateResource(Filename, False);  if hResource <> 0 then  begin    if UpdateResource(hResource, RT_RCDATA, RC_SETTINGS, 0, @Settings.Msg[1],      PDWORD(DWORD(Settings.Msg) - 4)^ + 1) then      Result := True;    EndUpdateResource(hResource, False);  end; end; function ReadSettings(var Settings: PSettings): Boolean; var  hResInfo: HRSRC;  hRes: HGLOBAL; begin  Result := False;  hResInfo := FindResource(hInstance, RC_SETTINGS, RT_RCDATA);  if hResInfo <> 0 then  begin    hRes := LoadResource(hInstance, hResInfo);    if hRes <> 0 then    begin      New(Settings);      Settings^.Msg := PChar(LockResource(hRes));      Result := True;    end;  end; end; end.
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 2 users say قال شكرا ل Agmcz على المشاركة المفيدة
  • mohamed49, wadoud
الرد
#3
(16-02-2017, 09:39 PM)Agmcz كتب : وعليكم السلام
كود :
unit shared; interface uses  Windows; type  TSettings = record    Msg: string;  end;  PSettings = ^TSettings; const  RC_SETTINGS = 'CFG'; function WriteSettings(Filename: PChar; Settings: PSettings): Boolean; function ReadSettings(var Settings: PSettings): Boolean; implementation function WriteSettings(Filename: PChar; Settings: PSettings): Boolean; var  hResource: Thandle; begin  Result := False;  hResource := BeginUpdateResource(Filename, False);  if hResource <> 0 then  begin    if UpdateResource(hResource, RT_RCDATA, RC_SETTINGS, 0, @Settings.Msg[1],      PDWORD(DWORD(Settings.Msg) - 4)^ + 1) then      Result := True;    EndUpdateResource(hResource, False);  end; end; function ReadSettings(var Settings: PSettings): Boolean; var  hResInfo: HRSRC;  hRes: HGLOBAL; begin  Result := False;  hResInfo := FindResource(hInstance, RC_SETTINGS, RT_RCDATA);  if hResInfo <> 0 then  begin    hRes := LoadResource(hInstance, hResInfo);    if hRes <> 0 then    begin      New(Settings);      Settings^.Msg := PChar(LockResource(hRes));      Result := True;    end;  end; end; end.

شكرا اخي على ردك التصحيح يعمل جيدا لكن اذا كان النص كبير جدا يظهر ربعه تقريبا حوالي 20 سطر  ثانيا لو اردت ارسال بيانات متفرقة هل يكفي اضافتها هكذا ام يجب التعديل على الكود ككل
type
 TSettings = record
   Msg: string;
   Msg1: string;
   Msg2: string;
   Msg3: string;
 end;
الرد
#4
ارفق النص الذي يظهر ربعه هنا...
إقتباس :لو اردت ارسال بيانات متفرقة
نعم يجب تعديل الكود في حالة تغيير record
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 1 user says قال شكرا ل Agmcz على المشاركة المفيدة
  • mohamed49
الرد
#5
(17-02-2017, 12:35 PM)Agmcz كتب : ارفق النص الذي يظهر ربعه هنا...
إقتباس :لو اردت ارسال بيانات متفرقة
نعم يجب تعديل الكود في حالة تغيير record

اي نص يكون طويل مثلا هذا  كما انه يظهر رموز في بعض الحروف ربما يجب اضافة ترميز utf8

هذا النص
De nombreux agriculteurs européens sont des viticulteurs (400 000 ha consacrés à la vigne en Algérie) dont les productions sont exportées surtout vers la France métropolitaine qui l'achète assez cher (selon l'historien Daniel Lefeuvre) pour maintenir le niveau de vie des colons. L'agriculture n'occupe que 9 % de la population active française (contre 26 % en métropole) mais les paysans d'origine française occupent l'essentiel des meilleures terres cultivables.[citation nécessaire] Cependant certaines sources certifient que ne sont attribuées aux colons que des terres alors en friche14[réf. à confirmer]. Le colon en réclame autant qu'il pense pouvoir en cultiver avec sa famille, mais doit dès la deuxième année acquitter l'impôt foncier proportionnel à la surface, ce qui dissuade les abus.

L'essentiel de la population musulmane est pauvre. Ce sont essentiellement de petits propriétaires terriens vivant sur les terres les moins fertiles, ou des journaliers. Dans les années 1950, les surfaces cultivables stagneraient autour de 7 millions d'ha La production agricole augmente peu entre 1871 et 1948, contrairement au nombre d'habitants. Selon Daniel Lefeuvre, la production annuelle de céréales passe de 3,88 quintaux/hab. à 2 q/hab. L'Algérie doit donc importer des produits alimentaires.

Le chômage est important, 1,5 millions de personnes sans emplois en 1955. La commune d'Alger aurait compté 120 bidonvilles avec 70 000 habitants en 1953.

Si la population musulmane est majoritairement pauvre, Daniel Lefeuvre rapporte qu'environ 600 000 Algériens musulmans « appartiennent aux groupes sociaux les plus favorisés » (grands propriétaires fonciers, professions libérales, membres de l'armée et de la fonction publique)15.

D'une manière générale, l'Algérie loin de présenter une source économique avantageuse est un lourd fardeau pour la métropole et ses contribuables16.

Après la fin de la Seconde Guerre mondiale, le plan Marshall prévoit une aide économique à la France et l'Algérie.
Commentaires sur des images d'illustration à propos des prises de position des différents partis, les communistes demandant la création d'une commission d'enquête, les socialistes étant plus prudents, toute la classe politique rejetant l'idéee d'une repentance. Itw de François ASENSI député PC de Seine-Saint-Denis et de Hervé de CHARETTE député UDF
الرد
#6
حجم النص هذا هو 2403 وعند كتابته على الملف التنفيذي يكون حجم الناتج 1205 وعند اعادة كتابة هذه الاسطر فقط


De nombreux agriculteurs européens

تظهر عند الحفظ غير كاملة

De nombreux agricu


ربما المشكلة في هذا السطر

PDWORD(DWORD(Settings.Msg) - 4)^ + 1)

تمام حليت المشكلة الاولى بقي كيفية اضافة عدة متغيرات كاليوزر والباس مثلا
الرد
#7
[صورة: attachment.php?aid=3433]
لا أعرف المشكل الذي تتكلم عنه يمكنك إرفاق محاولتك
مرفق مثال للتوضيح.


الملفات المرفقة
.rar   Test.rar (الحجم : 171.52 ك ب / التحميلات : 15)
.png   Test.png (الحجم : 11.31 ك ب / التحميلات : 70)
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 1 user says قال شكرا ل Agmcz على المشاركة المفيدة
  • mohamed49
الرد
#8
تمام اخي كانت المشكلة من عندي حيث استخدمت دلفي 7 مع 10 لكن بعد استخدام نفس الاصدار انحلت المشكلة يعطيك العافية اخي بقي كيفية التعديل لاضافة اكثر من متغير مثلا اليوزر والباس والبلد بارك الله فيك
الرد
#9
هل تريد تريد كتابة هذا recod
type
TSettings = record
Msg: string;
Msg1: string;
Msg2: string;
Msg3: string;
end;
بسبب String
يجب تأشير على عنوان بداية كل سلسلة
ويجب جمعها بترتيب للكتابة مباشرة
يمكن كتابة record بهذا الشكل
type
TSettings = record
Msg: array of string;
end;
؟
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 1 user says قال شكرا ل Agmcz على المشاركة المفيدة
  • mohamed49
الرد
#10
(19-02-2017, 10:55 PM)Agmcz كتب : هل تريد تريد كتابة هذا recod
type
TSettings = record
  Msg: string;
  Msg1: string;
  Msg2: string;
  Msg3: string;
end;
بسبب String
يجب تأشير على عنوان بداية كل سلسلة
ويجب جمعها بترتيب للكتابة مباشرة
يمكن كتابة record بهذا الشكل
type
TSettings = record
  Msg: array of string;
end;
؟

تمام اخي الله يحفظك سؤال خارج نوعا ما عن هذا الموضوع اذا امكن اخي

اريد مثال لتشغيل سترينغ عن طريق رانبي او ماشابه يعمل على دلفي 2010 اذا ما في ازعاج
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم