Форум: "Основная";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];
ВнизКак избавиться от стандартной прорисовки в ListBox-e??? Найти похожие ветки
← →
dimonf (2003-04-24 08:43) [0]Я написал свою прорисовку ListBox-а, при этом использовал функцию DrawItem. Свойство Style выставил в lbOwnerDrawFixed.
Все бы хорошо работало, но возникла проблема! Когда мой ListBox не имеет фокус на форму накладываеться другая форма у меня прорисовываеться стандартный курсор "синего цвета" в том месте где в последний момент был курсор. В чем проблема??? Как этого можно избежать???
← →
Игорь Шевченко (2003-04-24 09:26) [1]Текст DrawItem в студию
← →
dimonf (2003-04-24 09:32) [2]Вот:
procedure Tmain.msListBoxDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var Obj: PDBObject;
FIcon: TIcon;
OutRect: TRect;
begin
FIcon:=TIcon.Create;
with (Control as TListBox).Canvas do begin
FillRect(Rect);
if (odSelected in State) and (odFocused in State) then begin
Brush.Color := $00C66931;
Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
Font.Color := clWhite;
end;
Obj:= PDBObject(msListBox.Items.Objects[Index]);
Rect.Right:=msColumns.Sections.Items[0].Right;
OutRect:=Rect;
msIcon.GetIcon(Obj^.Icon, FIcon);
Draw(Rect.Left+1,Rect.Top,FIcon);
OutRect.Left:=OutRect.Left+18;
DrawText(Handle, PChar(Obj^.DisplayName), length(Obj^.DisplayName), OutRect, dt_Left or dt_Singleline or dt_VCenter);
Rect.Left:=msColumns.Sections.Items[1].Left;
Rect.Right:=msColumns.Sections.Items[1].Right;
OutRect:=Rect;
DrawText(Handle, PChar(AnsiLowerCase(Obj^.Description)), length(Obj^.Description), OutRect, dt_Left or dt_Singleline or dt_VCenter);
Rect.Left:=msColumns.Sections.Items[2].Left;
Rect.Right:=msColumns.Sections.Items[2].Right-5;
OutRect:=Rect;
IF TextWidth(Obj^.FreeSize)>(OutRect.Right-OutRect.Left) then
OutRect.Left:=OutRect.Right-TextWidth(Obj^.FreeSize);
DrawText(Handle, PChar(Obj^.FreeSize), length(Obj^.FreeSize), OutRect, dt_Left or dt_Singleline or dt_VCenter);
Rect.Left:=msColumns.Sections.Items[3].Left;
Rect.Right:=msColumns.Sections.Items[3].Right;
OutRect:=Rect;
DrawText(Handle, PChar(Obj^.DateTime), length(Obj^.DateTime), OutRect, dt_Left or dt_Singleline or dt_VCenter);
end;
FIcon.Free;
end;
← →
Zz_ (2003-04-24 09:35) [3]>>if (odSelected in State) and (odFocused in State)
if (odSelected in State) or (odFocused in State)
← →
dimonf (2003-04-24 09:52) [4]Zz_ не не помогло всеравно ресуеться 8(
← →
REA (2003-04-24 10:06) [5]with (Control as TListBox).Canvas do begin
FillRect(Rect);
- а может оно и есть синее? цвет ведь нигде не устанавливается
← →
dimonf (2003-04-24 10:16) [6]Почему устанавливаю:
if (odSelected in State) and (odFocused in State) then begin
Brush.Color := $00C66931; - цвет фона
Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); - рисую прямоугольник
Font.Color := clWhite; - цвет букв на синем прямоугольнике
end;
← →
dimonf (2003-04-24 10:18) [7]Вся фишка в том что данный код ресуеться и тогда когда у меня на форму накладываеться другая форма. А мая теряет фокус. Дык как же мне сделать чтобы при прорисовке, если нет фокуса у listbox-а не рисовать этот прямоугольник???
← →
REA (2003-04-24 10:19) [8]См. выше. На момент FillRect цвет не установлен.
← →
Игорь Шевченко (2003-04-24 11:05) [9]REA © (24.04.03 10:19)
> На момент FillRect цвет не установлен.
Здрасте!
Установлен.
stdctrls.pas
FCanvas.Handle := hDC;
FCanvas.Font := Font;
FCanvas.Brush := Brush;
if (Integer(itemID) >= 0) and (odSelected in State) then
begin
FCanvas.Brush.Color := clHighlight;
FCanvas.Font.Color := clHighlightText
end;
← →
REA (2003-04-24 11:18) [10]Так я про то же самое. Не установлен в самой программе, но установлен в компоненте. Эффект очень похож.
← →
Игорь Шевченко (2003-04-24 11:33) [11]REA © (24.04.03 11:18)
А, пардон, какая разница ?
← →
REA (2003-04-24 13:30) [12]Вопрос то в чем:
>Когда мой ListBox не имеет фокус на форму накладываеться другая форма у меня прорисовываеться стандартный курсор "синего цвета" в том месте где в последний момент был курсор.
Т.е. не вызывается кусок который хочет автор Brush.Color := $00C66931; (по каким-то причинам), а вызывается только FillRect стандартым цветом, что и соответствует "стандартному курсору".
Почему не вызывается уже второй вопрос.
← →
Игорь Шевченко (2003-04-24 17:13) [13]REA © (24.04.03 13:30)
Почему не вызывается - понятно, потому что не focused, согласно условию "накладываеться другая форма"
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c