المشاركات : 152
المواضيع 93
:
: 26
الإنتساب : Oct 2015
السلام عليكم
كيف اضيف صورة الى record ثم استدعائها في الاستعلام
Tcustomer=record
Name: string
Image:Timage
المشاركات : 397
المواضيع 2
:
: 264
الإنتساب : Nov 2009
16-10-2020, 10:56 AM
(آخر تعديل لهذه المشاركة: 16-10-2020, 10:58 AM بواسطة h-farid.)
و عليكم السلام
لو كنت مكانك لاستعملت متغير من نوع نص يمثل مسار ملف الصورة بدل الصورة في حد ذاتها. على الشكل التالي :
كود :
TCustomer = record
Name : String;
Image : String;
و من بعدها :
كود :
aCustomer.Image := 'C:\001.jpg';
من قال حاد عن أصله أو قال مات فقد كذب
كل من 1 user says قال شكرا ل h-farid على المشاركة المفيدة1 user says Thank You to h-farid for this post
• mobile
المشاركات : 1,624
المواضيع 374
:
: 1,278
الإنتساب : Nov 2013
16-10-2020, 12:57 PM
(آخر تعديل لهذه المشاركة: 16-10-2020, 01:00 PM بواسطة Delphi4Us.)
كود :
type
Tcustomer = record
Image: TImage;
Name: String;
end;
عند اشتخدام كائنات بداخل السجل ستحتاج الى انشاءها
كود :
var
Form1: TForm1;
Emp:Tcustomer;
Image:TImage;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Image := TImage.Create(nil);
Emp.Image:=Image
end;
ربما من الافضل استخدام الكلاسس الذي يتيح لك انشاء الكائنات وهدمها عند انشاءه
كود :
Tcustomer= class(TObject)
public
Image : TImage;
constructor Create;
destructor Destroy; override;
end;
مثال
كود :
constructor Tcustomer.Create;
begin
Image := TImage.Create(nil);
end;
destructor Tcustomer.Destroy;
begin
Image.Free;
end;
اما عن البحث فيها فانت اكيد سوف تنشئ مصفوفة منها
كود :
customer: array[0..1000] of Tcustomer;
وبعدها يمكنك من خلال تكرار المرور عليها والبحث عن اسم او رقم
ايضا فكرة اخرى يمكنك تحويل الصورة الى نص وحفظها كنص
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
المشاركات : 152
المواضيع 93
:
: 26
الإنتساب : Oct 2015
شكرا للجميع
اعتقد ان فكرة التحويل الى نص هي الافضل لكن هل من خوارزمية غير معقدة لفعل ذلك
المشاركات : 1,624
المواضيع 374
:
: 1,278
الإنتساب : Nov 2013
الاساليب والاجراءات والطرق كثيرة وغير محدودة ويمكن البحث واختيار الانسب لك
على سبيل المثال لم اجربه
كود :
Function ImageToHex(Image:Timage; LineLen:integer):Tstringlist;
var ms:TmemoryStream; s:String; t:Ansistring;
begin
ms:=tmemorystream.Create;
try
image.Picture.SaveToStream(ms);
setlength(t,ms.Size*2);
BinToHex(ms.Memory^,Pansichar(t),ms.Size);
Result:=Tstringlist.create;
repeat
s:=copy(t,1,LineLen);
Result.Add(s);
delete(t,1,LineLen);
until t='';
finally
ms.free
end;
end;
procedure HexToImage(HexData:TstringList; var Image:Timage);
var ms:TmemoryStream; s:String;
begin
ms:=TmemoryStream.Create;
s:=HexData.Text;
try
ms.Size := Length(s) div 2;
HexToBin(PChar(s), ms.Memory^, ms.Size);
Image.Picture.LoadFromStream(ms);
finally
ms.free
end;
end;
وهذا مثال اخر لتحويل الصورة ووضع النص باداة نصوص
كود :
implementation
uses
EncdDecd;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
ss :TMemoryStream;
begin
ss :=TMemoryStream.Create();
try
Image1.Picture.Graphic.SaveToStream(ss);
Memo1.Text := EncodeBase64(ss.Memory, ss.Size);
finally
ss.Free;
end;
end;
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
المشاركات : 551
المواضيع 48
:
: 298
الإنتساب : Dec 2008
السلام عليكم
شكرا اخي ابو علي كلتا الطريقتين اللتين طرحت جميلة غير انه كما قال الاخ فريد استعمال المسارات افضل للتعامل مع الذاكرة ان كان البرنامج كبير
لأستهلنّ الصعب أو أدرك المنى فما انقادت الآمال إلاّ لصابر
كل من 1 user says قال شكرا ل mobile على المشاركة المفيدة1 user says Thank You to mobile for this post
• Delphi4Us
المشاركات : 152
المواضيع 93
:
: 26
الإنتساب : Oct 2015
(16-10-2020, 06:46 PM)Delphi4Us كتب : الاساليب والاجراءات والطرق كثيرة وغير محدودة ويمكن البحث واختيار الانسب لك
على سبيل المثال لم اجربه
كود :
Function ImageToHex(Image:Timage; LineLen:integer):Tstringlist;
var ms:TmemoryStream; s:String; t:Ansistring;
begin
ms:=tmemorystream.Create;
try
image.Picture.SaveToStream(ms);
setlength(t,ms.Size*2);
BinToHex(ms.Memory^,Pansichar(t),ms.Size);
Result:=Tstringlist.create;
repeat
s:=copy(t,1,LineLen);
Result.Add(s);
delete(t,1,LineLen);
until t='';
finally
ms.free
end;
end;
procedure HexToImage(HexData:TstringList; var Image:Timage);
var ms:TmemoryStream; s:String;
begin
ms:=TmemoryStream.Create;
s:=HexData.Text;
try
ms.Size := Length(s) div 2;
HexToBin(PChar(s), ms.Memory^, ms.Size);
Image.Picture.LoadFromStream(ms);
finally
ms.free
end;
end;
وهذا مثال اخر لتحويل الصورة ووضع النص باداة نصوص
كود :
implementation
uses
EncdDecd;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
ss :TMemoryStream;
begin
ss :=TMemoryStream.Create();
try
Image1.Picture.Graphic.SaveToStream(ss);
Memo1.Text := EncodeBase64(ss.Memory, ss.Size);
finally
ss.Free;
end;
end;
شكرا الطريقة تنجح لوحدها اي عند تحويل الصورة واستعادتها بواسطة encodebase64 لكن ما زلت اجد صعوبة في وضع النص داخل ملف الداتا الرئيسي كما في xml لان النصوص في ال record اعتقد انها محدودة الحجم او تحتاج الى مؤشرات لفعل ذلك فقد واجهت عدة اعتراضات
Integer overflow
Out of memory
فهل من نصيحة مع الشكر المسبق
المشاركات : 1,624
المواضيع 374
:
: 1,278
الإنتساب : Nov 2013
اولا كما قال الاخوة ربما مجلد فيه روابط للصور كل صورة تحمل رقم ID للملف المطلوب تكون افضل .
ولكن كما قلت لك سابقا استخدم الكلاسس بدل من السجلات اذا اردت الاستمرار بهذه الطريقة
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم