Форум: "Основная";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
ВнизListBox.Selected Найти похожие ветки
← →
Тролль (2003-11-27 08:35) [0]Доброе время суток, мастера! Мне вот тут нужно сделать так, чтобы в ListBox итемы выделялись как в Вынампе, т.е. без рамки вокруг и выделенные итемы оставались всегда выделенными. Спасибо.
← →
мыш (2003-11-27 11:03) [1]В событии ondrawitem (или что-то подобное) рисуй сам все как нравится на канве.
← →
Тролль (2003-11-28 06:32) [2]2 мыш
Это понятно дело, я так и делаю. Но есть пара приколов: при выделении всех (или части) итемов он рисует рамку не на всю ширину ЛистБокса, а обрезает под последнюю букву каждого итема, ну и рамку вокруг квадрата я тоже не могу убрать. В общем, так:
procedure TMainForm.ShortNamePlsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with ShortNamePls do
begin
Rect:=ItemRect(Index);
Canvas.Font.Color:=clLime;
if Selected[Index] then Canvas.FillRect(Rect);
Canvas.TextOut(Rect.TopLeft.X+2, Rect.Top, Items[Index]);
end;
end;
← →
Мыш (2003-11-28 07:28) [3]А ownerdraw установил?
← →
Тролль (2003-11-28 15:27) [4]Ну да, конечно!
← →
Тролль (2003-11-29 06:21) [5]Народ! Н уподскожите, пожалуйста, что делать, а то я совсем запутался!
← →
mike.dld (2003-11-29 06:44) [6]> чтобы в ListBox итемы выделялись как в Вынампе
В Винампе нет никаких ЛистБоксов, там всё рисуется вручную, так что думай...
← →
Мыш (2003-11-29 07:14) [7]Делай через стринггрид, там можно как угодно отрисовать все
← →
Тролль (2003-11-29 12:15) [8]2 мыш
Извини, но что ето такое?
← →
jack128 (2003-11-29 12:18) [9]
> Извини, но что ето такое?
TStringGrid
← →
Тролль (2003-12-01 08:25) [10]Понятно, понятно. Но он мне не подходит. Мож есть другие варианты.
← →
Zergling (2003-12-01 09:27) [11]procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
if not (Control is TListBox) then EXIT;
if not TListBox(Control).Selected[Index] then
begin
TListBox(Control).Canvas.Font.Color := clLime;
TListBox(Control).Canvas.Brush.Color := clBlack;
end else
begin
TListBox(Control).Canvas.Font.Color := clBlack;
TListBox(Control).Canvas.Brush.Color := clLime;
end;
TListBox(Control).Canvas.TextRect(Rect, Rect.Left, Rect.Top, TListBox(Control).Items.Strings[Index]);
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
if (Sender is TListBox) then (Sender as TListBox).Repaint;
end;
← →
Тролль (2003-12-02 07:03) [12]Посмотрел я твой вариант, но нашёл косячки (которые как раз то и надо убрать): эта рамка вокруг выделения так и осталась, а при выделении более одного итема сначала появляется рамка, а потом только закрашывается. Я переделал свой вариант вместо
if Selected[Index] then Canvas.FillRect(Rect);
поставил просто
Canvas.FillRect(Rect);
но проблема с рамкой осталась :(((
← →
NAlexey (2003-12-02 08:17) [13]Попробуй так:
на
CustomDrawItem(
Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
Stage: TCustomDrawStage; var DefaultDraw: Boolean);
var
var
ItemRect, TextRect: TRect;
Flags: Longint;
Data: string;
OldColor, NewColor: TColorRef;
I: Integer;
begin
DefaultDraw := False;
ItemRect := Item.DisplayRect(drBounds);
NewColor := GetTextColor(Sender.Canvas.Handle);
if (Item = Sender.ItemFocused) and (Item <> Sender.Selected) then
begin
Windows.FillRect(Sender.Canvas.Handle, ItemRect, GetSysColorBrush(COLOR_BTNFACE));
Windows.FrameRect(Sender.Canvas.Handle, ItemRect , GetSysColorBrush(COLOR_WINDOWFRAME));
end else if Item = Sender.Selected then
begin
NewColor := clWhite;
Windows.FillRect(Sender.Canvas.Handle, ItemRect, GetSysColorBrush(COLOR_HIGHLIGHT));
end else
Windows.FillRect(Sender.Canvas.Handle, ItemRect, GetSysColorBrush(COLOR_WINDOW));
if Item.Index < TListView(Sender).Items.Count then
begin
Flags := DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or
DT_NOPREFIX or DT_WORD_ELLIPSIS);
TextRect := Item.DisplayRect(drLabel);
Data := "";
Data := Item.Caption;
OldColor := GetTextColor(Sender.Canvas.Handle);
if NewColor <> OldColor then
SetTextColor(Sender.Canvas.Handle, NewColor);
SetBkMode(Sender.Canvas.Handle, TRANSPARENT);
DrawText(Sender.Canvas.Handle, PChar(Data), Length(Data), TextRect, Flags);
if Item.Subitems.Count > 0 then
begin
Data := "";
for I := 0 to Item.Subitems.Count - 1 do
begin
ListView_GetSubItemRect(Sender.Handle, Item.Index, I + 1, LVIR_LABEL, @TextRect);
Data := Item.Subitems[I];
DrawText(Sender.Canvas.Handle, PChar(Data), Length(Data), TextRect, Flags);
Data := "";
end;
end;
if NewColor <> OldColor then
SetTextColor(Sender.Canvas.Handle, OldColor);
end;
end;
← →
TrollXP (2003-12-03 16:11) [14]Что-то никак! Ругается вот на эту строчку:
ListView_ GetSubItemRect(Sender.Handle, Item.Index, I + 1, LVIR_LABEL, @TextRect);
То, что подчёркнуто, он не знает.
← →
Семен Сорокин (2003-12-03 16:30) [15]uses
CommCtrl;
← →
хамло (2003-12-03 17:38) [16]ListBox<>ListView
← →
Тролль (2003-12-04 04:56) [17]2 хамло
Не понял.
← →
NAlexey (2003-12-04 08:15) [18]>Тролль
хамло прав, виноват...
← →
Тролль (2003-12-07 07:00) [19]2 NAlexey
Ничего, но мож у тебя для ListBoxа что-нибудь найдётся??
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c