PDA

View Full Version : تغییر رنگ پس زمینه یک یا چند آیتم تو لیست باکس



joooje
پنج شنبه 19 اسفند 1389, 13:07 عصر
سلام به دوستان
چطور میتونم رنگ پس زمینه و نوشته یه لیست باکس رو تغییر بدم.
مثلا میخوام رنگ پس زمینه آیتم دوم قرمز بشه و رنگ نوشته اون سبز.
این کد رو هم تو فروم پیدا کردم ولی جواب نمیده
کسی کمک میکنه که اشکال کد چی هست؟




procedure TForm1.ListBox1DrawItem
(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState) ;
var
myColor: TColor;
myBrush: TBrush;
begin
myBrush := TBrush.Create;
with (Control as TListBox).Canvas do
begin
if not Odd(Index) then
myColor := clSilver
else
myColor := clYellow;

myBrush.Style := bsSolid;
myBrush.Color := myColor;
Windows.FillRect(handle, Rect, myBrush.Handle) ;
Brush.Style := bsClear;
TextOut(Rect.Left, Rect.Top,
(Control as TListBox).Items[Index]) ;
MyBrush.Free;
end;

AliReza Vafakhah
پنج شنبه 19 اسفند 1389, 14:44 عصر
خصیصه Style مربوط به ListBox را برابر lbOwnerDrawFixed قرار دهید .من کد را تست کردم مشکلتون حل میشه .

joooje
پنج شنبه 19 اسفند 1389, 17:44 عصر
سلام
ممنون
ولی چنتا مشکل داره:
1- اگه بخوام بعد از اجرای برنامه آیتم 5 رو تغییر رنگ بدم چی کار باید بکنم، حتما میخوام بعد از اجرای برنامه باشه
2- چطوری رنگ نوشته یه آیتم رو هم تغییر بدم
3- دیگه وقتی یه آیتم رو انتخاب میکنم رنگ اونو آبی نمیکنه و اصلا معلوم نیست که انتخاب شده مخصوصا تو حالت multiselect
3- و مهمتر از همه راست چین هم نمیشه، حتی من Rect.Left به Rect.Right-50 تبدیل کردم ولی خوب از آب درنمیاد. راست چینش برام خیلی مهمه
یه سوال دیگه؟
آیا امکان داره بتونم توی هر آیتم یه آیکون هم بزارم؟
خیلی کارم گیره
ممنون میشم راهنمایی کنید

AliReza Vafakhah
پنج شنبه 19 اسفند 1389, 22:45 عصر
1- اگه بخوام بعد از اجرای برنامه آیتم 5 رو تغییر رنگ بدم چی کار باید بکنم، حتما میخوام بعد از اجرای برنامه باشه

خوب آیتم مربوطه را یکبار حذف کنید و بعد مجددا با رنگ دلخواهتون ایجاد کنید.



2- چطوری رنگ نوشته یه آیتم رو هم تغییر بدم

در رویداد OnDrawItem

(Control as TListBox).Canvas.Font.Color:= clRed;



یه سوال دیگه؟
آیا امکان داره بتونم توی هر آیتم یه آیکون هم بزارم؟


تو راهنما دلفی 2009 و 2010 یک Example Code هست که باز من براتون گذاشتم


var
Form1: TForm1;
MyList: TStrings;
bitmap0, bitmap1, bitmap2: TBitmap;
implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
MyList := TStringList.Create; //local variable
bitmap0 := TBitmap.Create; //local variable
bitmap1 := TBitmap.Create; //local variable
bitmap2 := TBitmap.Create; //local variable
// MyList.Add('Animal');
// MyList.Add('Flowers');
// MyList.Add('Butterfly');
// ListBox1.Items.AddStrings(MyList);

ImageList1.GetBitmap(0, bitmap0);
ListBox1.Items.AddObject('Flowers', bitmap0);
ImageList1.GetBitmap(1, bitmap1);
ListBox1.Items.AddObject('Animal', bitmap1);
ImageList1.GetBitmap(2, bitmap2);
ListBox1.Items.AddObject('Butterfly', bitmap2);
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:TRect; State: TOwnerDrawState);
var
Bitmap: TBitmap; { Temporary variable for the item’s bitmap }
Offset: Integer; { Text offset width }
begin
Bitmap := TBitmap.Create;
with (Control as TListBox).Canvas do { Draw on control canvas, not on the form. }
begin
FillRect(Rect); { Clear the rectangle. }
Offset := 2; { Provide default offset. }
Bitmap := TBitmap((Control as TListBox).Items.Objects[Index]); { Get the bitmap. }
if Bitmap <> nil then
begin
BrushCopy(
Bounds(Rect.Left + Offset, Rect.Top, Bitmap.Width, Bitmap.Height),
Bitmap,
Bounds(0, 0, Bitmap.Width, Bitmap.Height),
clRed); {render bitmap}
Offset := Bitmap.width + 6; { Add four pixels between bitmap and text. }
end;
TextOut(Rect.Left + Offset, Rect.Top, (Control as TListBox).Items[Index]) { Display the text. }
end;
end;

joooje
جمعه 20 اسفند 1389, 19:16 عصر
خوب آیتم مربوطه را یکبار حذف کنید و بعد مجددا با رنگ دلخواهتون ایجاد کنید
سلام
هر کاری کردم نمیشه.یعنی آیتم حذف و اضافه میشه ولی رنگش تغییر نمیکنه.
میشه لطف کنید و برام یه کد نمونه بزارید که بعد از احرای برنامه با یه کلیک رو یه دکمه رنگ آیتم 3 زرد بشه.
راستی برای راست چینش کاری نمیشه کرد.
آیا میتونم طول نوشته شده در هر آیتم رو بگیرم و اونو تو داده L قرار بدم و بعد Rect.Left به Rect.Right-L تبدیل کنم.
اگه راهی داره ممنون میشم راهنمایی کنید.
ممنون از وقتی که گذاشتید برام

joooje
یک شنبه 22 اسفند 1389, 14:37 عصر
کیست مرا یاری کند؟؟

joooje
سه شنبه 24 اسفند 1389, 15:39 عصر
همچنان منتظر کمک!!!!