Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];

Вниз

Как сделать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.005 c
6-1197657416
СССР
2007-12-14 21:36
2009.02.01
IdHTTP Get и Post таймаут


9-1168524677
Samarik
2007-01-11 17:11
2009.02.01
Skin ы для 3D моделей


9-1176566300
ElectriC
2007-04-14 19:58
2009.02.01
Класс камеры DIrectX


2-1229498873
programmer90
2008-12-17 10:27
2009.02.01
Деревья


15-1228652353
DillerXX
2008-12-07 15:19
2009.02.01
Питание для переносного винчестера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский