Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.01;
Скачать: CL | DM;

Вниз

Как сделать listbox полосатым   Найти похожие ветки 

 
buzb ©   (2008-12-20 18:01) [0]

Как сделать listbox полосатым


 
Поросенок Винни-Пух ©   (2008-12-20 18:04) [1]

OnDrawItem


 
Leonid Troyanovsky ©   (2008-12-20 18:13) [2]


> uzb ©   (20.12.08 18:01)  

> Как сделать listbox полосатым

Покрасить полосками?

Не пробывал?

--
Regards, LVT.


 
KilkennyCat ©   (2008-12-20 21:29) [3]


> > Как сделать listbox полосатым
по вертикали


 
antonn ©   (2008-12-20 21:50) [4]

Удалено модератором
Примечание: Offtopic


 
Тын-Дын ©   (2008-12-21 01:05) [5]

procedure TForm1.Button1Click(Sender: TObject);
begin
 ListBox1.Items.LoadFromFile("Unit1.pas");
 ListBox1.Style := lbOwnerDrawFixed;

end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
var
 L: TListBox;
begin
 L := TListBox(Control);
 if Odd(Index)
   then L.Canvas.Brush.Color := clSilver
   else L.Canvas.Brush.Color := clWindow;
 L.Canvas.FillRect(Rect);
 L.Canvas.Font.Color := clBlack;
 L.Canvas.TextOut(Rect.Left+2,Rect.Top+2,L.Items[Index]);
end;


 
{RASkov} ©   (2008-12-21 01:32) [6]

> [3] KilkennyCat ©   (20.12.08 21:29)
> > > Как сделать listbox полосатым по вертикали

по вертикали - легко. А вот если наискосок... :)


 
Германн ©   (2008-12-21 02:32) [7]


> Тын-Дын ©   (21.12.08 01:05) [5]

В обработчике события компонента использовать локальную переменную, которая не нужна в принципе?
Это конечно не ошибка. Но - это "три с минусом".


 
Тын-Дын ©   (2008-12-21 02:42) [8]


> Германн ©   (21.12.08 02:32) [7]
> > Тын-Дын ©   (21.12.08 01:05) [5]В обработчике события
> компонента использовать локальную переменную, которая не
> нужна в принципе?Это конечно не ошибка. Но - это "три с
> минусом".


Снова ночной бред?


 
Тын-Дын ©   (2008-12-21 02:45) [9]

Хоть бы не пытался свой догматизм новичкам внушать...


 
Тын-Дын ©   (2008-12-21 02:53) [10]


> Германн ©


Извини, не выдержал.
Постоянный флуд от тебя достаёт бывает.


 
Игорь Шевченко ©   (2008-12-21 03:39) [11]

Тын-Дын ©   (21.12.08 02:42) [8]

Тут кто-то долго с хамством на форуме боролся в ветке в потрепаловке, не напомнишь, кто ?

И заодно предлагал банить не сразу, а после предупреждения. Так вот я тебя предупреждаю :)


 
Тын-Дын ©   (2008-12-21 03:46) [12]


> Игорь Шевченко ©   (21.12.08 03:39) [11]
> Тын-Дын ©   (21.12.08 02:42) [8] Тут кто-то долго с хамством
> на форуме боролся в ветке в потрепаловке, не напомнишь,
> кто ?И заодно предлагал банить не сразу, а после предупреждения.
>  Так вот я тебя предупреждаю :)


По этому поводу лучше в той ветке в потрепаловке всё же...


 
Германн ©   (2008-12-21 04:10) [13]


> Тын-Дын ©   (21.12.08 02:53) [10]
>
>
> > Германн ©
>
>
> Извини, не выдержал.
> Постоянный флуд от тебя достаёт бывает.
>

Хотел было извинить, но передумал.
Примите и прочь!


 
Riply ©   (2008-12-21 06:08) [14]

> [11] Игорь Шевченко ©   (21.12.08 03:39)

Игорь, а Вы тоже решили присоединиться к славному сообществу "полуночников" ?
Sorry за оффтоп, но уж очень любопытно стало :)


 
Leonid Troyanovsky ©   (2008-12-21 15:13) [15]


> Тын-Дын ©   (21.12.08 01:05) [5]

>  L.Canvas.TextOut(Rect.Left+2,Rect.Top+2,L.Items[Index]);

+2 - это что?

--
Regards, LVT.


 
Тын-Дын ©   (2008-12-21 15:23) [16]


> Leonid Troyanovsky ©   (21.12.08 15:13) [15]
> > Тын-Дын ©   (21.12.08 01:05) [5] >  L.Canvas.TextOut(Rect.
> Left+2,Rect.Top+2,L.Items[Index]);+2 - это что?


Ну как что? Отступ по-умолчанию.
Если нужно другой - можно и другой сделать.

А в данном конкретном случае это принципиальный вопрос?


 
Leonid Troyanovsky ©   (2008-12-21 15:30) [17]


> Тын-Дын ©   (21.12.08 15:23) [16]

> А в данном конкретном случае это принципиальный вопрос?

Отступ так отступ.
Просто интересуюсь, может чего пропустил из новых веяний.

Кста, а на зачем такой отступ по умолчанию?

--
Regards, LVT.


 
Тын-Дын ©   (2008-12-21 15:34) [18]


> Кста, а на зачем такой отступ по умолчанию?


С другим отступом отвратно выглядит.


 
Тын-Дын ©   (2008-12-21 15:34) [19]

Где-то в справке описано...


 
Leonid Troyanovsky ©   (2008-12-21 15:37) [20]


> Тын-Дын ©   (21.12.08 15:34) [18]

> С другим отступом отвратно выглядит.

Не знаю - на вкус и цвет фломастеры разные.
+2 залезет на рамку фокуса, если по умолчанию.

--
Regards, LVT.


 
Тын-Дын ©   (2008-12-21 16:18) [21]


> +2 залезет на рамку фокуса, если по умолчанию.


Да вроде никуда ничего не залазит.
Смещение 1 - слишком близко к линиям грида... 2 - в самы раз.


 
Leonid Troyanovsky ©   (2008-12-21 16:23) [22]


> Тын-Дын ©   (21.12.08 16:18) [21]

> Смещение 1 - слишком близко к линиям грида... 2 - в самы
> раз.

Может в гриде и не залазит, а в listbox - в самый раз.
D6, TD with XP.

--
Regards, LVT.


 
Denis__ ©   (2008-12-21 16:31) [23]


procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 with TListBox(Control) do
 begin
   if Odd(Index) then
     Canvas.Brush.Color := clSilver
   else
     Canvas.Brush.Color := clWindow;
   Canvas.FillRect(Rect);
   Canvas.Font.Color := clBlack;
   Canvas.TextOut(Rect.Left+2,Rect.Top,Items[Index]);
 end;
end;


Так не правильней будет, нет?


 
Leonid Troyanovsky ©   (2008-12-21 16:38) [24]


> Denis__ ©   (21.12.08 16:31) [23]

> Так не правильней будет, нет?

Не знаю. Для правильности надо еще исследовать множественное
выделение и т.д. и т.п. Но, эстетичней - да :)

--
Regards, LVT.


 
{RASkov} ©   (2008-12-21 16:39) [25]

> Так не правильней будет, нет?

А по мне вот так красивше:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
 if Control is TlistBox then
  with TListBox(Control), Canvas do begin
   if Odd(Index) then Brush.Color := clSilver
    else Brush.Color := clWindow;
   FillRect(Rect);
   //Font.Color := clBlack; // Зачем?
   TextOut(Rect.Left+2, Rect.Top, Items[Index]);
  end;
end;

тут и в самом деле - разговор о фломастерах....)


 
Leonid Troyanovsky ©   (2008-12-21 16:45) [26]


> {RASkov} ©   (21.12.08 16:39) [25]

> > Так не правильней будет, нет?

>  if Control is TlistBox then

Так, конечно, правильней, а остальное, дейс-но, вкусовщина.
Я бы даже так сделал: with Control as TlistBox do,
дабы неповадно было.

--
Regards, LVT.


 
Smile   (2008-12-21 16:55) [27]

А по мне, так в {RASkov} ©   (21.12.08 16:39) [25], да и ранее

FillRect(Rect);
TextOut(Rect.Left+2, Rect.Top, Items[Index]);


это лишнее, не вижу необходимости :(


 
Leonid Troyanovsky ©   (2008-12-21 17:12) [28]


> Smile   (21.12.08 16:55) [27]

> FillRect(Rect);
> TextOut(Rect.Left+2, Rect.Top, Items[Index]);

> это лишнее, не вижу необходимости :(

А как же +2? Это ж удовлетворяет эстетические потребности :)

Насчет излишеств: отметил недавно у уважаемоего здравомыслящего
дельфера с солидным стажем обниление полей в конструкторе.
На что он резонно ответил: можете считать это проявлением
моей паранойи, но как делал, так и буду делать ;)

--
Regards, LVT.


 
Denis__ ©   (2008-12-21 17:14) [29]


>  Но, эстетичней - да :)

Пытаюсь писать код, чтобы он был красвее, понятнее чтоль))

> with TListBox(Control), Canvas do

Нам преподаватель отсоветовал так делать. Ну, я понимаю что это дело каждого, но так не пишу)


 
Leonid Troyanovsky ©   (2008-12-21 17:25) [30]


> Denis__ ©   (21.12.08 17:14) [29]

> Пытаюсь писать код, чтобы он был красвее, понятнее чтоль))

Главное, чтобы он был понятен всем, а не только вам на двоих
с компилятором ;)

С помощью with можно создавать изящные конструкции (догоняя C
по возможности определить нечто нужное в нужном месте),
но, к сожалению, в оных местах не очень удобна отладка.
Да и воспринимаются они читающими не одинаково.

--
Regards, LVT.


 
KilkennyCat ©   (2008-12-21 20:11) [31]


> Главное, чтобы он был понятен всем,

для этого придумали комментарии ;)


 
antonn ©   (2008-12-21 21:46) [32]


> antonn ©   (20.12.08 21:50) [4]
>
> Удалено модератором
> Примечание: Offtopic
>

да неужели? а пост, к которому это было написано не оффтопик?


> Leonid Troyanovsky ©   (21.12.08 16:38) [24]
>
>
> > Denis__ ©   (21.12.08 16:31) [23]
>
> > Так не правильней будет, нет?
>
> Не знаю. Для правильности надо еще исследовать множественное
> выделение и т.д. и т.п. Но, эстетичней - да :)

Нет. Это не будет эстетичней. Потому что в списках текст обычно выравнивается по центру или по нижней границе.


 
{RASkov} ©   (2008-12-21 23:19) [33]

> [32] antonn ©   (21.12.08 21:46)
> Нет. Это не будет эстетичней. Потому что в списках текст обычно выравнивается по центру или по нижней границе.

По моему про эстетичность написания кода говорилось, а не результат работы алгоритма в ListBox1DrawItem...
Если ты конечно сделал укор на то, что Rect.Top в [23] остался без +2 :)


 
antonn ©   (2008-12-22 00:33) [34]


> {RASkov} ©   (21.12.08 23:19) [33]

пользуясь случаем, я, как и все мастера, ловко уйду от ответа и не буду пояснять, что я хотел сказать %)


 
{RASkov} ©   (2008-12-22 01:06) [35]

> [34] antonn ©   (22.12.08 00:33)
> пользуясь случаем,

Я уж было подумал, что приветы сейчас начнешь передавать :)


 
antonn ©   (2008-12-22 01:17) [36]

не, приветы это "личная переписка" :)
и дабы не сочли пост оффтопом, немного полезной информации :))
Выравнивание по средине строки:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 with (Control as TlistBox) do begin
   if Odd(Index) then
    canvas.Brush.Color:=clSilver
   else
    canvas.Brush.Color:=clWindow;
   canvas.FillRect(Rect);
   canvas.TextOut(Rect.Left+2, (((Rect.Bottom-Rect.Top)-canvas.TextHeight(Items[Index])) div 2)+Rect.Top, Items[Index]);
 end;
end;


 
Германн ©   (2008-12-22 01:26) [37]

2 antonn ©   (22.12.08 01:17) [36]
и все прочие, кто причастен. А откуда возник отступ именно на 2 пикселя от левой границы области вывода?
Не. Ну я тоже так делаю в OnDrawXXX. Но вот почему именно так?
:)


 
{RASkov} ©   (2008-12-22 01:30) [38]

> [36] antonn ©   (22.12.08 01:17)
> canvas.TextOut(Rect.Left+2, (((Rect.Bottom-Rect.Top)-canvas.TextHeight(Items[Index])) div 2)+Rect.Top, Items[Index]);

Или так:
DrawText(canvas.Handle, PChar(Items[Index]), -1, Rect, DT_LEFT or DT_SINGLELINE or DT_VCENTER{или DT_BOTTOM});
И тут тоже можно отстут в 2 пиксела слева сделать, достаточно у Rect"а сместить левую границу....


 
{RASkov} ©   (2008-12-22 01:32) [39]

> [37] Германн ©   (22.12.08 01:26)

Загляни в метод DrawItem у TCustomListBox и все станет ясно :)


 
имя   (2008-12-22 01:35) [40]

Удалено модератором



Страницы: 1 2 вся ветка

Текущий архив: 2009.02.01;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.02 c
2-1229465866
Lelik
2008-12-17 01:17
2009.02.01
Поиск записи в запросе


15-1228677835
DillerXX
2008-12-07 22:23
2009.02.01
Кварцевая лампа и обгоание мебели


15-1228709242
Slider007
2008-12-08 07:07
2009.02.01
С днем рождения ! 8 декабря 2008 понедельник


11-1197054692
Vinum
2007-12-07 22:11
2009.02.01
Как в перемен. типа PGif загрузить из перемен. типа TStringStream


2-1229319612
CodeMaster
2008-12-15 08:40
2009.02.01
Прокрутка в Наследнике класса TListBox