Learn How to Store Text,Icon,Bitmap file into resource with Delphi

การสร้าง resource file (.res)
สำหรับขั้นตอนการสร้างไฟล์ต่าง ๆ ขอใช้ภาพประกอบเพื่อให้ง่ายต่อการเข้าใจ

ลำดับแรกจะต้องสร้าง Text file ที่ต้อบการจะเก็บค่าต่าง ๆ 
ในที่นี้ผมขอยกตัวอย่าง คือการเก็บรายชื่อ ประเทศดังภาพตัวอย่าง

Country.txt (Text file)




















ขั้นตอนที่ 2 สร้าง file Country.RC
โดยสร้างจากเดลไฟ หรือจะใช้ Notepad ก็ได้
หลังจากสร้าง Country.RC แล้ว ให้เขียน Script ดังภาพ
Create country.RC












ขั้นตอนที่ 3 Compile Country.RC
ด้วยคำสั่ง
BRCC32 D:\XE8\test_resource_file\Country.RC

Compile Country.RC






หลังจาก Compileจะได้ไฟล์ Country.RES
ดังภาพ
Country.RES


















ขั้นตอนที่ 4 ขั้นตอนการเรียกใช้งานไฟล์ Country.RES
โดยให้ Add เพิ่ม บรรทัดการอ้างถึง file Country.res ดังตัวอย่าง
{$R Country.res}

Add Country.res into project












ขั้นตอนที่ 5 ขั้นตอนการเขียนคำสั่งเพื่อเรียกใช้ Country.res
ซึ่งจะอ้างถึงไฟล์ดังตัวอย่าง

function LoadCountryCode(Lists: TStrings): boolean;
var
  stream: TResourceStream;
  i: byte;
begin
  stream := TResourceStream.Create(HInstance, 'COUNTRY', RT_RCDATA);
  Result := false;
  try
    Lists.LoadFromStream(stream);
    Result := true;
  finally
    stream.Free;
  end;
end;

Reference to Resource file















ทดลองเรียกฟังชั่น
เพื่ออ่านข้อมูลจาก country.res
มาแสดงใน  TCombobox และ TListbox

Sample to call Country.res and load into control













คำสั่งในปุ่ม
Load from .resource file

procedure TForm2.Button1Click(Sender: TObject);
begin
  LoadCountryCode(ComboBox1.Items);
  LoadCountryCode(ListBox1.Items);
end;

Delphi work with Country.res













สุดท้าย ลองเอา Program Resource Hacker เปิดดู Project1.exe
ได้ดังภาพ เห็นส่วนของ Resource COUNTRY
Resource Hacker 












ทดสอบแก้ไข EXE โดยแก้ไฟล์ EXE ผ่าน  Program Resource Hacker
Modify resource with Resource Hacker.

How to store Icon, Bitmap

Country.Rc file.

REDICO ICON resource\Red.ico
GREENICO ICON resource\Green.ico
ONLINE BITMAP resource\online.BMP


How to get icon, bitmap in Delphi.

var
  myIcon: TIcon;
begin
  myIcon := TIcon.Create;
  try
    Image1.Picture.Bitmap.LoadFromResourceName(HInstance, 'ONLINE');

    myIcon.LoadFromResourceName(HInstance, 'REDICO');
    ImageList1.AddIcon(myIcon);
    myIcon.LoadFromResourceName(HInstance, 'GREENICO');
    ImageList1.AddIcon(myIcon);

  finally
    myIcon.Free;
  end;
  // showmessage(format('%d', [ImageList1.Count]));
end;





Comments