ورود

View Full Version : سوال: چطور یه ليست از آیکن های برنامه های مورد نياز در برنامه خودم داشته باشم



mbshareat
یک شنبه 05 خرداد 1398, 01:41 صبح
سلام.
بهم گفتند قسمت بالای پنجره برنامه آیکن برای اجرای برنامه ها داشته باشم.
چند تا مشکل دارم:
1.بعضی برنامه ها آیکن گویا ندارند و باید نام برنامه هم نمایش داده بشه در حالی که کمبود فضای خالی دارم.
2.کدی که پیدا کردم نمی دونم چرا آیکن رو کوچک می کنه(مثلا من برای برنامه آیکن 48*48 تعریف کردم اما این کد 32*32 نشون میده)
3.از چه کامپوننتی استفاده کنم؟ُSpeedButton-BitBtn-ListBox.
فعلا سوال اول برام مهمتره.سوال دوم رو برای کنجکاوی در مورد کد جواب میخوام.سومی هم که فکر کنم BitBtn خوب باشه یا فوقش لیست باکس با ترسیم خودم.
ممکنه یه نگاه به کد بندازید؟
procedure TForm1.GetProgramIcon();
var
IconIndex: word;
Buffer: array[0..2048] of char;
IconHandle: HIcon;
Bitmap : TBitmap;
OpenDialog: TOpenDialog;
MyIcon:TIcon;
begin
OpenDialog := TOpenDialog.Create(nil);
try
if OpenDialog.Execute then
begin
StrCopy(@Buffer, PChar(OpenDialog.FileName));
IconIndex := 0;
IconHandle := ExtractAssociatedIcon(HInstance, Buffer, IconIndex);
MyIcon:=TIcon.Create;
if IconHandle <> 0 then
MyIcon.Handle := IconHandle;
Bitmap := TBitmap.Create;
try
Bitmap.Width := MyIcon.Width;
Bitmap.Height := MyIcon.Height;
Bitmap.Canvas.Draw(0, 0, MyIcon);
SpeedButton1.Glyph.Assign(Bitmap);
finally
Bitmap.Free;
MyIcon.Free;
end;
end;
finally
OpenDialog.Free;
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
GetProgramIcon();
end;

mbshareat
یک شنبه 05 خرداد 1398, 01:45 صبح
راستی می تونم speedButton رو داخل لیست باکس بذارم؟

یه مشکل دیگه هم دارم.من پراپرتی flat رو true می کنم.نمی دونم چرا در یه برنامه ساده کد بالا رو امتحان می کنم آیکن رو که برای دکمه میذاره،دکمه در حالت فشار دادن قرار نمی گیره ولی در برنامه خودم میذارم انگار کلیک شده.پراپرتی down هم تاثیری نداشت!

یوسف زالی
یک شنبه 05 خرداد 1398, 14:23 عصر
سلام. دان باید به همراه گروپ استفاده بشه.
اسپید رو هم نمی شه داخل لیست باکس گذاشت مگر این که کامپوننتش رو تغییر بدی

mbshareat
دوشنبه 06 خرداد 1398, 02:13 صبح
ممنون.به این نتیجه رسیدم که از لیست باکس استفاده کنم و هر رکورد یه بیت مپ باشه.