PDA

View Full Version : تغییر رنگ ایتم انتخاب شده



رهنورد2
پنج شنبه 30 آذر 1385, 08:13 صبح
اگر دیده باشید وقتی ایتمی را در لیست باکس انتخاب می کنیم به صورت ابی selectمیشه و ایتم داخل ان با رنگ سفید نشان داده میشه اگر بخواهیم ایتم داخل ان به رنگب غیر از سفید نشان داده بشه چی کار باید کرد

حرفه ای
پنج شنبه 30 آذر 1385, 09:05 صبح
Component هایی در این زمینه وجود داره و رنگ Listbox دلفی از ویندوز گرفته میشه

رهنورد2
پنج شنبه 30 آذر 1385, 11:49 صبح
اگر روی دسکتاپ راست کلیک کنیم در قسمتappearance با تغییر color scheme به silverرنگ موضوع انتخاب شده خاکستری وایتم ان به همان رنگ سیاه می ماند حال اگر بخواهیم در داخل برنامه مان این کار را وفقط برای برنامه خودمان انجام دهیم چه کار باید کرد

رهنورد2
شنبه 02 دی 1385, 08:46 صبح
فکر کنم با SetSysColors بشود ولی چطوریش را نمی دانم

رهنورد2
چهارشنبه 06 دی 1385, 09:20 صبح
اگر روی دسکتاپ راست کلیک کنیم در قسمتappearance با تغییر color scheme به silverرنگ موضوع انتخاب شده خاکستری وایتم ان به همان رنگ سیاه می ماند حال اگر بخواهیم در داخل برنامه مان این کار را وفقط برای برنامه خودمان انجام دهیم چه کار باید کرد

ایا این کار امکان پذیر است

m-khorsandi
چهارشنبه 06 دی 1385, 11:01 صبح
1- پراپرتی Style رو با lbOwnerDrawFixed مقدار دهی کن.
2- کد زیر رو برای رویداد OnDrawItem بنویس:


if odSelected in State then
begin
(Control as TListBox).Canvas.Font.Color := clYellow;
(Control as TListBox).Canvas.Brush.Color := clNavy;
end
else
(Control as TListBox).Canvas.Font.Color := clBlack;

(Control as TListBox).Canvas.FillRect(Rect);
(Control as TListBox).Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, (Control as TListBox).Items[index]);

MNosouhi
چهارشنبه 06 دی 1385, 11:53 صبح
فکر کنم با SetSysColors بشود ولی چطوریش را نمی دانم
بله ، یه راهش همینه که فرمودید . کدش هم :


var
nColorIndex: array [1..2] of integer;
nColorValue: array [1..2] of longint;
begin
nColorIndex[1]:= COLOR_HIGHLIGHTTEXT;
nColorIndex[2]:=COLOR_HIGHLIGHT;
nColorValue[1]:= clRed; // define the select font color you want
nColorValue[2]:= clYellow; // define the background color of selected item
SetSysColors(2, nColorIndex, nColorValue);
PostMessage(HWND_BROADCAST,WM_SYSCOLORCHANGE,0,0);
end;البته باید به یک نکته توجه کنید ، این تابع روی کل سیستمتون اثر میگذاره ، بنابراین باید در استفاده از اون دقت کنید . برای مثال کد بالا باعث میشه هر متنی که داخل ویندوز انتخاب شده دارای فونت قرمز و رنگ پشت زمینه زرد باشه.
شما میتونید با رویداد های OnActive,OnDeactive فرمتون این امر رو مدیریت کنید.
راه دیگه استفاده از رویداد OnDrawItem مربوط به Listbox است که آقای خراسانی هم توضیح دادن.