delphi4arab منتديات دلفي للعرب

نسخة كاملة : اضافة صورة الى myrecord
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
كيف اضيف صورة الى record ثم استدعائها في الاستعلام
Tcustomer=record
Name: string
Image:Timage
و عليكم السلام
لو كنت مكانك لاستعملت متغير من نوع نص يمثل مسار ملف الصورة بدل الصورة في حد ذاتها. على الشكل التالي :

كود :
TCustomer = record Name : String; Image : String;

و من بعدها :

كود :
aCustomer.Image := 'C:\001.jpg';
كود :
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;

وبعدها يمكنك من خلال تكرار المرور عليها والبحث عن اسم او رقم

ايضا فكرة اخرى يمكنك تحويل الصورة الى نص وحفظها كنص
شكرا للجميع 
اعتقد ان فكرة التحويل الى نص هي الافضل لكن هل من خوارزمية غير معقدة لفعل ذلك
الاساليب والاجراءات والطرق كثيرة وغير محدودة ويمكن البحث واختيار الانسب لك
على سبيل المثال لم اجربه


كود :
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;
السلام عليكم
شكرا اخي ابو علي كلتا الطريقتين اللتين طرحت جميلة غير انه كما قال الاخ فريد استعمال المسارات افضل للتعامل مع الذاكرة ان كان البرنامج كبير
(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 
فهل من نصيحة مع الشكر المسبق
اولا كما قال الاخوة ربما مجلد فيه روابط للصور كل صورة تحمل رقم ID للملف المطلوب تكون افضل .
ولكن كما قلت لك سابقا استخدم الكلاسس بدل من السجلات اذا اردت الاستمرار بهذه الطريقة