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

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

و من بعدها :

كود :
aCustomer.Image := 'C:\001.jpg';
من قال حاد عن أصله أو قال مات فقد كذب
[-] كل من 1 user says قال شكرا ل h-farid على المشاركة المفيدة
  • mobile
الرد
#3
كود :
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;

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

ايضا فكرة اخرى يمكنك تحويل الصورة الى نص وحفظها كنص
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 1 user says قال شكرا ل Delphi4Us على المشاركة المفيدة
  • mobile
الرد
#4
شكرا للجميع 
اعتقد ان فكرة التحويل الى نص هي الافضل لكن هل من خوارزمية غير معقدة لفعل ذلك
الرد
#5
الاساليب والاجراءات والطرق كثيرة وغير محدودة ويمكن البحث واختيار الانسب لك
على سبيل المثال لم اجربه


كود :
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;
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 1 user says قال شكرا ل Delphi4Us على المشاركة المفيدة
  • jeanjamil
الرد
#6
السلام عليكم
شكرا اخي ابو علي كلتا الطريقتين اللتين طرحت جميلة غير انه كما قال الاخ فريد استعمال المسارات افضل للتعامل مع الذاكرة ان كان البرنامج كبير
لأستهلنّ الصعب أو أدرك المنى    فما انقادت الآمال إلاّ لصابر
[-] كل من 1 user says قال شكرا ل mobile على المشاركة المفيدة
  • Delphi4Us
الرد
#7
(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 
فهل من نصيحة مع الشكر المسبق
الرد
#8
اولا كما قال الاخوة ربما مجلد فيه روابط للصور كل صورة تحمل رقم ID للملف المطلوب تكون افضل .
ولكن كما قلت لك سابقا استخدم الكلاسس بدل من السجلات اذا اردت الاستمرار بهذه الطريقة
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 1 user says قال شكرا ل Delphi4Us على المشاركة المفيدة
  • jeanjamil
الرد


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


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