Главная страница
    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]

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


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


> {RASkov} ©   (22.12.08 01:32) [39]
>
> > [37] Германн ©   (22.12.08 01:26)
>
> Загляни в метод DrawItem у TCustomListBox и все станет ясно
> :)
>

Глядел. Видел. Понимал. Ну и что?
Сабж относится к теме "OnCustomDraw". Дык почему же все советуют именно +2?


 
KilkennyCat ©   (2008-12-22 01:41) [42]


> Дык почему же все советуют именно +2?

я не советовал. у меня стиль флэт.


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

> [41] Германн ©   (22.12.08 01:40)
> Дык почему же все советуют именно +2?

Ну там же(в VCL) тоже смещение в 2 пиксела используется, вот чтобы выглядело как стандартное рисование и советуют теже самые 2 пиксела отступать... Имхо конечно, так как OnDrawXXX на то и ОнДрав, что бы там рисовать как раз не стандартно :)


 
{RASkov} ©   (2008-12-22 01:46) [44]

> [41] Германн ©   (22.12.08 01:40)
> Сабж относится к теме "OnCustomDraw". Дык почему же все советуют именно +2?

Ну да, дошло :) Кустомдрав, а советуют по стандарту, так что ли? :)


 
Германн ©   (2008-12-22 02:00) [45]


> {RASkov} ©   (22.12.08 01:46) [44]
>
> > [41] Германн ©   (22.12.08 01:40)
> > Сабж относится к теме "OnCustomDraw". Дык почему же все
> советуют именно +2?
>
> Ну да, дошло :) Кустомдрав, а советуют по стандарту, так
> что ли? :)
>

Так. Ну или примерно так. :)
Но тут ещё и Костя влез.

> KilkennyCat ©   (22.12.08 01:41) [42]


 
Тын-Дын ©   (2008-12-22 02:13) [46]

Э-э... Где в теме звучит OnCustomDraw? Я что-то не пойму. -(


 
Игорь Шевченко ©   (2008-12-22 02:27) [47]

а без custom( точнее, Owner) Draw на Listbox-е рисовать не очень удобно. Точнее, совсем неудобно


 
Riply ©   (2008-12-22 02:56) [48]

> [30] Leonid Troyanovsky ©   (21.12.08 17:25)
> С помощью with можно создавать изящные конструкции (догоняя C
> по возможности определить нечто нужное в нужном месте),
> но, к сожалению, в оных местах не очень удобна отладка.

Сначала мне это (не очень удобна отладка) тоже сильно мешало.
Но пообвыклась и стала таких местах либо смотреть в WatchList-е, либо
временно дописывать в конец процедуры обращение к подопытной структуре.


 
Тын-Дын ©   (2008-12-22 03:20) [49]


> Но пообвыклась и стала таких местах либо смотреть в WatchList-
> е, либовременно дописывать в конец процедуры обращение к
> подопытной структуре.


Вот для того в [5] и используется промежуточная короткая переменная.
Добавить недолго, а удобство есть.

Но это конечно как кому нравится...


> Игорь Шевченко ©   (22.12.08 02:27) [47]
> а без custom( точнее, Owner) Draw на Listbox-е рисовать
> не очень удобно. Точнее, совсем неудобно


А-а. ну это понятно.

ListBox1.Style := lbOwnerDrawFixed;

А почему +2? Да чтобы выглядело как стандартная отрисовка. Ведь у автора вопрос был в том, чтобы закрасить строки...


 
Riply ©   (2008-12-22 04:15) [50]

> [49] Тын-Дын ©   (22.12.08 03:20)

>> Но пообвыклась и стала таких местах либо смотреть в WatchList-
>> е, либовременно дописывать в конец процедуры обращение к
>> подопытной структуре.

> Вот для того в [5] и используется промежуточная короткая переменная.
> Добавить недолго, а удобство есть.

imho, ListBox не относится к тем структурам,
чьи поля интересны в период отладки :)


 
KilkennyCat ©   (2008-12-22 04:17) [51]

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


 
Тын-Дын ©   (2008-12-22 10:00) [52]


> Riply ©   (22.12.08 04:15) [50]
> > [49] Тын-Дын ©   (22.12.08 03:20)
>
> >> Но пообвыклась и стала таких местах либо смотреть в WatchList-
>
> >> е, либовременно дописывать в конец процедуры обращение
> к
> >> подопытной структуре.
>
> > Вот для того в [5] и используется промежуточная короткая
> переменная.
> > Добавить недолго, а удобство есть.
>
> imho, ListBox не относится к тем структурам,
> чьи поля интересны в период отладки :)


А вводить названия методов и полей вручную? Удобнее из выпадающего списка.
При этом всё делается уже на автомате.

В этот раз TListBox, в следующий раз значительно более сложная структура...



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

Форум: "Начинающим";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.007 c
15-1228477841
Артур Пирожков
2008-12-05 14:50
2009.02.01
Если нет Офиса, а нужно открыть Аксесовский файл?


15-1228640979
Том
2008-12-07 12:09
2009.02.01
Подскажите, что за мелодия


2-1229502902
zorik
2008-12-17 11:35
2009.02.01
перевод каретки


11-1197059646
Сергей
2007-12-07 23:34
2009.02.01
Скрол для KOLGrushPanel


2-1229508124
neveGreen
2008-12-17 13:02
2009.02.01
InternetConnect ()





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский