12-11-2022, 06:48 PM
الصفحات : 1 2
13-11-2022, 12:18 PM
وعليكم السلام
ان كان للعرض فقط يمكنك استعمال BinToHex لتحويل المعطيات من Bin الى النص Hex اما التعديل على المعطيات على memo1 سيكون صعب و غير عملي الا اذا كانت بسيطة
كود لفتح ملف
ان كان للعرض فقط يمكنك استعمال BinToHex لتحويل المعطيات من Bin الى النص Hex اما التعديل على المعطيات على memo1 سيكون صعب و غير عملي الا اذا كانت بسيطة
كود لفتح ملف
كود :
procedure TForm1.Button1Click(Sender: TObject);
var
S:string;
M:TMemoryStream;
begin
if OPENDIALOG1.Execute then
begin
M:=TMemoryStream.Create();
try
M.LoadFromFile(opendialog1.Filename);
Setlength(S,M.Size*2);
BinToHex(PAnsichar(M.Memory),PWidechar(S),M.Size);
memo1.Lines.Text := S;
finally
M.Free;
end;
end;
end;13-11-2022, 01:59 PM
شكرا لك اخي الكريم اريد التعديل عليه كما في الصورة المرفقة
13-11-2022, 09:19 PM
انت لاتقدم معلومات كافية ولا ادري كيف تريد التعديل الملف الثنائي ما يظهر في الصورة هو StringGrid وليس Memo
انظر المثال المرفق يقوم التعامل مع ملف Bin بواسطة DrawGrid
يمكنك تعيله علي حسب حاجة
![[صورة: Dlg.png]](https://i.ibb.co/pJNdmjY/Dlg.png)
انظر المثال المرفق يقوم التعامل مع ملف Bin بواسطة DrawGrid
يمكنك تعيله علي حسب حاجة
![[صورة: Dlg.png]](https://i.ibb.co/pJNdmjY/Dlg.png)
15-11-2022, 09:39 AM
برك الله فيك اخي الكريم
اريد نداء لقيمة معينة في سطر معين
مثلا
سطر 00007B0
قيمة التى نناديها في EDIT1 هيا
D8F3
مثال للتوضيح اكثر
00007B0 : D8F3 FEA0 D8F3 FE21 D8F3 FE22 D8F3 FEA3
القيمة باللون لاحمر اريدها مناتها عند رفع الملف يذهب البرنامج الى السطر 00007b0 offest
برك الله فيك اخي الكريم
اريد نداء لقيمة معينة في سطر معين
مثلا
سطر 00007B0
قيمة التى نناديها في EDIT1 هيا
D8F3
مثال للتوضيح اكثر
00007B0 : D8F3 FEA0 D8F3 FE21 D8F3 FE22 D8F3 FEA3
القيمة باللون لاحمر اريدها مناتها عند رفع الملف يذهب البرنامج الى السطر 00007b0 offest
اريد نداء لقيمة معينة في سطر معين
مثلا
سطر 00007B0
قيمة التى نناديها في EDIT1 هيا
D8F3
مثال للتوضيح اكثر
00007B0 : D8F3 FEA0 D8F3 FE21 D8F3 FE22 D8F3 FEA3
القيمة باللون لاحمر اريدها مناتها عند رفع الملف يذهب البرنامج الى السطر 00007b0 offest
برك الله فيك اخي الكريم
اريد نداء لقيمة معينة في سطر معين
مثلا
سطر 00007B0
قيمة التى نناديها في EDIT1 هيا
D8F3
مثال للتوضيح اكثر
00007B0 : D8F3 FEA0 D8F3 FE21 D8F3 FE22 D8F3 FEA3
القيمة باللون لاحمر اريدها مناتها عند رفع الملف يذهب البرنامج الى السطر 00007b0 offest
16-11-2022, 12:45 PM
معنى هذا انه يقوم بعملية بحث لايجاد قيمة D8F3 و تحديد عنوانها في الجدول ,,لقد اظفت زر Find يقوم بعملية البحث من العنوان 0 ان كنت تريد البحث من عنوان محدد غير قيمة BinTxtBPos في BFindClick الى عنوان الذي تريده
ان كنت تريد الذهاب مباشرة الى عنوان محدد تمكنك ادخاله في Offset الموجود اعلى Edit
المشكلة مع Memo انه لايمكن التعامل مع العناوين و من دون اظهارها لايمكن التعامل مع الملف بسهوله
هناك مثالان في الملف المرفق
ان كنت تريد الذهاب مباشرة الى عنوان محدد تمكنك ادخاله في Offset الموجود اعلى Edit
المشكلة مع Memo انه لايمكن التعامل مع العناوين و من دون اظهارها لايمكن التعامل مع الملف بسهوله
هناك مثالان في الملف المرفق
22-11-2022, 12:31 PM
(16-11-2022, 12:45 PM)Ndagor كتب : [ -> ]معنى هذا انه يقوم بعملية بحث لايجاد قيمة D8F3 و تحديد عنوانها في الجدول ,,لقد اظفت زر Find يقوم بعملية البحث من العنوان 0 ان كنت تريد البحث من عنوان محدد غير قيمة BinTxtBPos في BFindClick الى عنوان الذي تريده
ان كنت تريد الذهاب مباشرة الى عنوان محدد تمكنك ادخاله في Offset الموجود اعلى Edit
المشكلة مع Memo انه لايمكن التعامل مع العناوين و من دون اظهارها لايمكن التعامل مع الملف بسهوله
هناك مثالان في الملف المرفق
السلام عليكم ورحمة الله وبركاته
اخي هل يمكنك شرح الكود سطر سطر ووضع تعليق لكل سطر بالانجليزية , ان كان وقتك يسمح للشرح فأتمنى ان يكون درس مفصل حتى استطيع الفهم
28-11-2022, 06:23 PM
لقد قمت بتبسيط الكود ليسهل عليك فهمه و اضفت بعض التعليقات ..بانجليزيتي البسيطة..
بعد فتح الملف يمكن معاينة اي جزء من الملف و ذلك بتحديد العنوان و حجم البيانات المراد معاينتها و يمكن تعديلها ثم تسجيل كل ذلك ..يمكن ايضا اجراء بحث عن قيمة محددة..
يمكن مواصلة التعليق على هذا الرابط المتعلق بالموضوع ..
https://delphi4arab.net/forum/showthread...8#pid55848
بعد فتح الملف يمكن معاينة اي جزء من الملف و ذلك بتحديد العنوان و حجم البيانات المراد معاينتها و يمكن تعديلها ثم تسجيل كل ذلك ..يمكن ايضا اجراء بحث عن قيمة محددة..
يمكن مواصلة التعليق على هذا الرابط المتعلق بالموضوع ..
https://delphi4arab.net/forum/showthread...8#pid55848
08-12-2022, 08:11 PM
برك الله فيك اخي الكريم
اريد البحث عن 5 قيم والقيم يختلف عنونها في الملف
واريد استبدلها بقيم اخرى
3D1020 = FDCD10
3E1020 = FECD10
3F1020 = FFCD10
3C1020 = FCCD10
3D1020 =FDCD10
سارفق لك ملف المراد تعديل عليه واماكن التعديل لو سمحت
اريد البحث عن 5 قيم والقيم يختلف عنونها في الملف
واريد استبدلها بقيم اخرى
3D1020 = FDCD10
3E1020 = FECD10
3F1020 = FFCD10
3C1020 = FCCD10
3D1020 =FDCD10
سارفق لك ملف المراد تعديل عليه واماكن التعديل لو سمحت
09-12-2022, 02:11 PM
تمت اضافة دالة ReplaceHex لعمليات تغيير المحتوى سواء يدويا باستعمال زر Replace او اليا يمكن كتابة الكود العملية استبدال عدة قيم على الشكل التالي:
ان كنت مهتم فقط بعملية استبدال القيم يمكنك عزل الكود المهم
لتتمكن من فهمه واستخدامه بسهولة في مشروعك:
كود :
procedure TForm1.Button3Click(Sender: TObject);
begin
ReplaceHex('3D1020','FDCD10');
ReplaceHex('3E1020','FECD10');
ReplaceHex('3F1020','FFCD10');
ReplaceHex('3C1020','FCCD10');
ReplaceHex('3D1020','FDCD10');
end;ان كنت مهتم فقط بعملية استبدال القيم يمكنك عزل الكود المهم
لتتمكن من فهمه واستخدامه بسهولة في مشروعك:
كود :
function HexToArray(const AHexStr:string):TBytes; // convert Hex to Binary data
var
I, LenB: Integer;
sStr:string;
begin
Result :=nil;
sStr :='';
for I := 1 to Length(AHexStr) do // delete any white character to pack hex txt
begin // E4 56 77 .. => E45677
if AHexStr[I] > ' ' then
sStr := sStr + AHexStr[I];
end;
if Odd(Length(sStr)) then // Length of sStr must be even
raise Exception.Create('Text Hex invalide :'+ AHexStr );
LenB := Length(sStr) div 2;// binary length is half of Hex string
Setlength(Result,LenB); // new binary buffer
HexToBin(PWideChar(sStr),PAnsiChar(Result),LenB);// convert hex to bin
end;
function TForm1.BinFind(const Arr: array of byte; AStart:integer):integer;
var
I,LenB : Integer;
begin
Result := -1;
LenB :=Length(Arr);
if LenB = 0 then
Exit;
for I := AStart to MStream.Size-LenB do
begin
if (MStream.Bytes[I] = Arr[0]) then //Compare first char if matched compare the rest by CompareMem
if CompareMem(@Arr[0],@MStream.Bytes[I],LenB) then
Exit(I); // return found position
end;
end;
function TForm1.ReplaceHex(const AHex,AHexRep:string;ReplaceAll:boolean;AStart:integer):integer;
var
Bin,Rep:TBytes;
Pz:integer;
begin
Bin:= HexToArray(AHex);
Rep:= HexToArray(AHexRep);
if Length(Bin)<> Length(Rep) then
raise Exception.Createfmt('Donnée de longueur différente "%s" "%s"',[AHex,AHexRep]);
if ReplaceAll then
AStart :=0;
Pz:=AStart;
Result := 0;
repeat
Pz:=BinFind(Bin, Pz);
if Pz <>-1 then // remplacer
begin
Move(Rep[0],MStream.Bytes[Pz],Length(Rep));
Pz := Pz + Length(Bin);
inc(Result);
end;
until not ReplaceAll or ( Pz = -1);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ReplaceHex('3D1020','FDCD10');
ReplaceHex('3E1020','FECD10');
ReplaceHex('3F1020','FFCD10');
ReplaceHex('3C1020','FCCD10');
ReplaceHex('3D1020','FDCD10');
end;الصفحات : 1 2