![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
вот код отрисоки
Код:
PngIcon:=TPngImage.Create;
if odSelected in State then begin
CheckListBox4.Canvas.Brush.Color:=RGB(255,119,227);
CheckListBox4.Canvas.Font.Color:=ClBlue;
end
ELSE begin
CheckListBox4.Canvas.Brush.Color:=CheckListBox4.Color;
CheckListBox4.Canvas.Font.Color:=clPurple;
end;
CheckListBox4.ItemHeight:=20;
CheckListBox4.Canvas.Font.Size:=12;
CheckListBox4.Canvas.TextOut(Rect.Left,Rect.Top,DynamicLangSaveLang[index]);
if (Length(ParamIconSaveLang[index])>0)and(ParamIconSaveLang[index]<>'...') then begin
PngIcon.LoadFromFile(ExtractFileDir(Application.ExeName)+ParamIconSaveLang[index]);
CheckListBox4.Canvas.Draw(Rect.Left+150,Rect.Top+3,PngIcon);
end;
PngIcon.Free;В масиве DynamicLangSaveLang хранятся тексты в PngIcon будет находится иконка в формате png Вот скрин 1) Почему остается рамка выделения и как это исправить 2) Как эти числа получить програмно Rect.Left+150,Rect.Top+3 CheckListBox4.ItemHeight:=20; чтобы после изменения размеров шрифта менялась и отрисовка а также иконки были сразу после текста а не в пол метре от него |
|
#2
|
||||
|
||||
|
1. сам же меняешь цвет в if odSelected in State then ... Color:=clPurple;
2. вместо 150 задай меньше отступ |
|
#3
|
||||
|
||||
|
Цитата:
Я не про это а про желтые контуры. которые никак не хотят убераться при стандартном стиле Windows Цитата:
Я спросил Как эти числа получить програмно Rect.Left+150,Rect.Top+3 CheckListBox4.ItemHeight:=20; чтобы после изменения размеров шрифта менялась и отрисовка а также иконки были сразу после текста а не в пол метре от него Последний раз редактировалось AlexandrV, 02.08.2013 в 10:25. |
|
#4
|
||||
|
||||
|
Почему такие баги может ктонибудь ответит но баги 100% не из за этого
Код:
if odSelected in State then begin
CheckListBox4.Canvas.Brush.Color:=RGB(255,119,227);
CheckListBox4.Canvas.Font.Color:=ClBlue;
end
ELSE begin
CheckListBox4.Canvas.Brush.Color:=CheckListBox4.Color;
CheckListBox4.Canvas.Font.Color:=clPurple;
end;Если это убрать все равно остается |
|
#5
|
||||
|
||||
|
|
|
#6
|
||||
|
||||
|
Ну и как ты это сделал. Дай код. врядли ктонибудь сможет вернуть код из бинарного состояния. это в принципе невозможно
|
|
#7
|
||||
|
||||
|
Решил первую проблему.
Код:
procedure TForm1.CheckListBox4DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var i:integer;
cc:TCanvas;
begin
PngIcon:=TPngImage.Create;
if odSelected in State then begin
CheckListBox4.Canvas.Brush.Color:=DynamicColor[40];
CheckListBox4.Canvas.Font.Color:=DynamicColor[39];
end
ELSE begin
CheckListBox4.Canvas.Brush.Color:=CheckListBox4.Color;
CheckListBox4.Canvas.Font.Color:=DynamicColor[38];
end;
CheckListBox4.ItemHeight:=20;
CheckListBox4.Canvas.Font.Size:=12;
CheckListBox4.Canvas.FillRect(Rect);
CheckListBox4.Canvas.TextOut(Rect.Left,Rect.Top,DynamicLangSaveLang[index]);
if (Length(ParamIconSaveLang[index])>0)and(ParamIconSaveLang[index]<>'...') then begin
PngIcon.LoadFromFile(ExtractFileDir(Application.ExeName)+ParamIconSaveLang[index]);
CheckListBox4.Canvas.Draw(Rect.Left+150,Rect.Top+3,PngIcon);
end;
PngIcon.Free;
end;Теперь осталось вот эти числа Rect.Left+150 Rect.Top+3 CheckListBox4.ItemHeight:=20; Получать программным путем если вдруг измениться CheckListBox4.Canvas.Font.Size:=12; |
|
#8
|
||||
|
||||
|
Код:
procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
if odSelected in State then
CheckListBox1.Canvas.Brush.Color:=clFuchsia;
CheckListBox1.Canvas.FillRect(Rect);
CheckListBox1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top, CheckListBox1.Items[Index]);
ImageList1.Draw(CheckListBox1.Canvas, CheckListBox1.Canvas.TextWidth('W'+CheckListBox1.Items[Index])+2+Rect.Left, Rect.Top, Index);
end; |
|
#9
|
||||
|
||||
|
ImageList1.Draw(CheckListBox1.Canvas, CheckListBox1.Canvas.TextWidth('W'+CheckListBox1.I tems[Index])+2+Rect.Left, Rect.Top, Index);
Я сделал лучше но все равно Код:
procedure TForm1.CheckListBox4DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var i:integer;
cc:TCanvas;
begin
PngIcon:=TPngImage.Create;
if odSelected in State then begin
CheckListBox4.Canvas.Brush.Color:=DynamicColor[40];
CheckListBox4.Canvas.Font.Color:=DynamicColor[39];
end
ELSE begin
CheckListBox4.Canvas.Brush.Color:=CheckListBox4.Color;
CheckListBox4.Canvas.Font.Color:=DynamicColor[38];
end;
CheckListBox4.ItemHeight:=20;
CheckListBox4.Canvas.Font.Size:=12;
CheckListBox4.Canvas.FillRect(Rect);
if (Length(ParamIconSaveLang[index])>0)and(ParamIconSaveLang[index]<>'...') then begin
PngIcon.LoadFromFile(ExtractFileDir(Application.ExeName)+ParamIconSaveLang[index]);
CheckListBox4.Canvas.Draw(Rect.Left,Rect.Top+3,PngIcon);
end;
CheckListBox4.Canvas.TextOut(Rect.Left+PngIcon.Width+5,Rect.Top,DynamicLangSaveLang[index]);
PngIcon.Free;
end;Не решает проблемы иконка должна быть по середине height текста и это число надо получить CheckListBox4.ItemHeight:=20; программно |
|
#10
|
||||
|
||||
|
Цитата:
Код:
PngIcon:=TPngImage.Create; PngIcon.LoadFromFile(ExtractFileDir(Application.ExeName)+ParamIconSaveLang[index]); PngIcon.Free; ![]() после маленькой доработки у меня вот так получилось: ![]() и не сбивается от размера шрифта |