الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن كود استخراج اليقونات من الملفات

مغلق
بدأه essam7 في 14 يوليو 2005 · 11 رد · 1,059 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

يمكن ملاحظة الفرق من ايقونات المسنجر في C:\Program Files\MSN Messenger

ارجو المساعدة

uses
  shellapi;
procedure TForm1.Button1Click(Sender: TObject);
var
  LargeIcon: HIcon;
  SmallIcon: HIcon;
  IconCount: Integer;
  i: Integer;
  FileName: PChar;
begin
  // draw a stripe with all large icons contained in the file
  // and below of that a stripe with all small icons.
  if OpenDialog1.Execute then
     FileName:= pchar(OpenDialog1.FileName);
  IconCount := ExtractIconEx(FileName, -1, LargeIcon, SmallIcon, 0);
  for i := 0 to Pred(IconCount) do
  begin
    ExtractIconEx(FileName, i, LargeIcon, SmallIcon, 1);
   savetofile(LargeIcon);
    DrawIcon(Canvas.Handle, 5 + i * 36, 5, LargeIcon);
    DrawIconEx(Canvas.Handle, 5 + i * 36, 50, SmallIcon,
      GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0, 0, DI_NORMAL);
  end;
end;
#2

عفوا هذا هو الكود

uses
  shellapi;

procedure TForm1.Button1Click(Sender: TObject);
var
  LargeIcon: HIcon;
  SmallIcon: HIcon;
  IconCount: Integer;
  i: Integer;
  FileName: PChar; icn : ticon;
begin
  // draw a stripe with ddall large icons contained in the file
  // and below of that a stripe with all small icons.
  if OpenDialog1.Execute then
     FileName:= pchar(OpenDialog1.FileName);
  IconCount := ExtractIconEx(FileName, -1, LargeIcon, SmallIcon, 0);
  for i := 0 to Pred(IconCount) do
  begin
    ExtractIconEx(FileName, i, LargeIcon, SmallIcon, 1);

     if SavePictureDialog1.Execute then
      icn := ticon.Create;
       icn.Handle := largeicon;
       icn.SaveToFile(SavePictureDialog1.FileName);

   // savetofile(LargeIcon);
    DrawIcon(Canvas.Handle, 5 + i * 36, 5, LargeIcon);
    DrawIconEx(Canvas.Handle, 5 + i * 36, 50, SmallIcon,
      GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0, 0, DI_NORMAL);
  end;
end;
#3

جرب هذا الكود

uses ShellAPI;

.  . . 

procedure TForm1.Button1Click(Sender: TObject);
var
  A: array [0..78] of Char;

begin
  if OpenDialog1.Execute then
    begin
    StrPCopy(A, OpenDialog1.FileName);
  Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0);

    end;
end;

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#4

ثم اضف هذا الكود

procedure TForm1.Button2Click(Sender: TObject);
var
 Bitmap : TBitmap;
begin
 Bitmap := TBitmap.Create;
 Bitmap.Width :=Image1.Picture.Icon.Width;
 Bitmap.Height:=Image1.Picture.Icon.Height;
 Bitmap.Canvas.Draw(0, 0, Image1.Picture.Icon);
 Bitmap.SaveToFile('c:\picture.bmp');
 Bitmap.Free;
end;

لحفظ الايقونة بالتنسيق bmp

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#5

شكرا عزيزي

لكن سؤالي أني أريد ملفات من صيغة icon وليس bmp !!!!

#6

اصبر علي قليلا انا الان اجهز الموضوع

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#7

شكرا جزييييييييلا لك

بانتظارك

#8

يا اخي اسف والله

باءت محاولاتي بحفظ الملف على شكل ico بدون ان تصبح الصورة باهتة بالفشل!!!!

في حل ثاني :rolleyes:

يعني الحصول على الايقونة من اي ملف ممكن

ثم حفظها بالتنسيق bmp وهذا الامر ناقشناه سابقا

وفي المرة القادمة من هذا الملف الذي حفظناه بالتنسيق bmp نستطيع استخراج الايقونة والتعامل معها برمجيا كاي

ايقونة ولكن تذكر الحفظ يكون بالتنسيق ico

هذا اقصى ما استطعت ان افعله وانا اسف لجعلك تنتظر وتخييب الامل

procedure TForm1.Button1Click(Sender: TObject);
var
IconSizeX: integer;
  IconSizeY: integer;

XOrMask: TBitmap;
  IconInfo: TIconInfo;
  Icon: TIcon;
begin
IconSizeX := GetSystemMetrics(SM_CXICON);
IconSizeY := GetSystemMetrics(SM_CYICON);
XOrMask := TBitmap.Create;
XOrMask.Width := IconSizeX;
XOrMask.Height := IconSizeY;
XOrMask.LoadFromFile('C:\picture.bmp');{}

Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);
{Create a icon}
Icon := TIcon.Create;
  IconInfo.fIcon := true;
  IconInfo.xHotspot := 0;
  IconInfo.yHotspot := 0;
  IconInfo.hbmMask := XOrMask.Handle;
  IconInfo.hbmColor := XOrMask.Handle;
  Icon.Handle := CreateIconIndirect(IconInfo);
  {Destroy the temporary bitmaps}
 // AndMask.Free;
  XOrMask.Free;
  {Draw as a test}
Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon);
  {Assign the application icon}
  Application.Icon := Icon;
  {Force a repaint}
  InvalidateRect(Application.Handle, nil, true);
  {Free the icon}
  Icon.Free;
end;

لاحظ هذا السطر

XOrMask.LoadFromFile('C:\picture.bmp');{}

فيه سوف تستدعي ايقونة محفوظة بالتنسيق bmp طبعا كيف ستحول الايقونة الاصلية من (ico ) الى التنسيق (bmp) معروف في مشاركتي السابقة

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#9

شكرا جزيلا على محاولتك مساعدتي

لكن لماذا الالوان باهتة عند التخزين بملف!!!!!!!

ألا من مساااااااااااااااعد!!

أيضا عند وضع الايقونة للبرنامج تكون خلفية الايقونة بيضاء فهل ممكن أن تكون شفافة؟؟

أشكرك مرة أخرى romanof

#10

هل حاولت ان تسال اين هو السطر الذي يظهر الايقونة

Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);
Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon);

لاحظ ان الاول يستخدم متغير من النوع bitmap كمصدر للصورة و بالتالي خلفية الايقونة بيضاء

بينما الثاني يستخدم Icon كمصدر للصورة خلفية الايقونة شفافة

احذف السطر الاول الله يخليك .

في الحقيقة ستجده السطر السابع من الكود الاخير

اقتباس
ولكن تذكر الحفظ يكون بالتنسيق ico

انا اسف على

كنت اريد ان اقول bmp

اقتباس
لكن لماذا الالوان باهتة عند التخزين بملف!!!!!!!

ألا من مساااااااااااااااعد!!

لانه عند تخزين الملف يقوم البرنامج عند استخدام

Icon.saveTofile ('ff');

بحفظ الايقونة على شكل 16 لون بينما قد تتكون الايقونة من اكثر من ذلك

في الواقع العامل الاساسي هو عدد البتات المستخدمة لحفظ كل بيكسل

لاحظ ان كل لون يحتاج الى 4 بايتات اذا مصفوفة الالوان تشغل

4x16 = 64 بايتا في حالة ال256 حوالي 1024

فعند الحفظ يقوم الوندوز بتجاهل بعض الالوان (لا ادري لماذا)

وهذا هو السبب كون الصورة باهتة

ربما من الممكن ان تقوم بحفظ الصورة داخل ملف عديم النوع

var
F: file;

ثم اضافة الامتداد ico الى اسم الملف

ن الكود الاخير يظهر لك الايقونة مرتين

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#11

شكرا جزيلا عزيزي

اسف عمبغلبك معي

شكرا مرة اخرى

#12

اخبرني هل اشتغل الكود ؟؟؟

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

هذا الموضوع مغلق.

مواضيع مشابهة