mbshareat
یک شنبه 12 آذر 1391, 11:34 صبح
سلام و درود
من یه لیست باکس دارم که میخوام برای متن داخلش افکت گرافیکی داشته باشم
بنابر این Style لیست باکس رو برابر lbOwnerDrawFixed قرار دادم و ترسیم متن رو داخل بیت مپ انجام میدم و بعد که روی بیت مپ افکت رو اعمال کردم با Canvas.Draw میریزم توی لیست باکس.
اما من میخوام لیست باکس آیتم جاری رو مشخص نکنه (چیزی شبیه Memo!)
چطور میتونم از شر کادر فوکوس که با عملیات بالا دیگه نقطه چین هم نیست و مستطیل معمولی شده خلاص بشم؟
این هم کد من (افکت رو فعلا نیاز نبود توی کد بیارم!):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ItemBmp:TBitmap;
implementation
{$R *.dfm}
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ItemBmp.Canvas.FillRect(ItemBmp.Canvas.ClipRect);
ItemBmp.Canvas.TextOut(0,0,ListBox1.Items[Index]);
//اميدوار بورم دو سطر زير
//!کمک کنه
//بدون این دو سطر نقطه چین میشه مستطیل
ListBox1.Canvas.Brush.Color:=clBlack;
ListBox1.Canvas.Brush.Style:=bsClear;
ListBox1.Canvas.Draw(Rect.Left,Rect.Top,ItemBmp);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ItemBmp:=TBitmap.Create;
ItemBmp.PixelFormat:=pf24Bit;
ItemBmp.Width:=ListBox1.ClientWidth;
ItemBmp.Height:=ListBox1.ItemHeight;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ItemBmp.Free;
end;
end.
من یه لیست باکس دارم که میخوام برای متن داخلش افکت گرافیکی داشته باشم
بنابر این Style لیست باکس رو برابر lbOwnerDrawFixed قرار دادم و ترسیم متن رو داخل بیت مپ انجام میدم و بعد که روی بیت مپ افکت رو اعمال کردم با Canvas.Draw میریزم توی لیست باکس.
اما من میخوام لیست باکس آیتم جاری رو مشخص نکنه (چیزی شبیه Memo!)
چطور میتونم از شر کادر فوکوس که با عملیات بالا دیگه نقطه چین هم نیست و مستطیل معمولی شده خلاص بشم؟
این هم کد من (افکت رو فعلا نیاز نبود توی کد بیارم!):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ItemBmp:TBitmap;
implementation
{$R *.dfm}
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ItemBmp.Canvas.FillRect(ItemBmp.Canvas.ClipRect);
ItemBmp.Canvas.TextOut(0,0,ListBox1.Items[Index]);
//اميدوار بورم دو سطر زير
//!کمک کنه
//بدون این دو سطر نقطه چین میشه مستطیل
ListBox1.Canvas.Brush.Color:=clBlack;
ListBox1.Canvas.Brush.Style:=bsClear;
ListBox1.Canvas.Draw(Rect.Left,Rect.Top,ItemBmp);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ItemBmp:=TBitmap.Create;
ItemBmp.PixelFormat:=pf24Bit;
ItemBmp.Width:=ListBox1.ClientWidth;
ItemBmp.Height:=ListBox1.ItemHeight;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ItemBmp.Free;
end;
end.