Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2007, 14:50   #1
Nez
Пользователь
 
Аватар для Nez
 
Регистрация: 15.01.2007
Сообщений: 72
По умолчанию Навести красоту в ListBox-е

по-моему ListBox Называется, лень счас заново Delphi запускать.. Вобщем выпадающий список...

Дело в другом..

У меня в программе там в ListBox добавляются записи.. Вот хотелось бы, чтобы записи создавались "с картинками", приблизительно вот так: " "->" текст строчки",

где "->" - обычная картинка в Jpg, и вот в зависимости от параметров там должна то одна картинка перед строчкой помещаться, то другая.. Можно ли такое реализовать.. То есть чтобы посути эта картиночка была частью одной строкчи, а не фон общего раскрывающегося окна...

Вы поняли про что я?

Вобщем после всех добавлений при раскрытии мы должны увидеть нечто следующее:

"->" Петя
"->" Андрей
"->" Вася
"->" Коля
"->" Аня
"->" Таня
"->" Марина

Ну это я так, от балды... И, чтобы при выборе нужного пункта желательно, чтобы эта картиночка тоже поднималась в заголовок....



Можно ли подобное реализовать???
Nez вне форума Ответить с цитированием
Старый 27.03.2007, 16:20   #2
Umen
Форумчанин
 
Аватар для Umen
 
Регистрация: 10.11.2006
Сообщений: 189
По умолчанию

Конечно можно! Например так:

ставим свойство Style := lbOwnerDrawFixed
В обработчике OnDrawItem описываем, как будет отрисовываться элемент, например:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
if index mod 2 = 0 then
ListBox1.Canvas.StretchDraw(Rect, Image1.Picture.Graphic);
if index mod 2 = 1 then
ListBox1.Canvas.StretchDraw(Rect, Image2.Picture.Graphic);
end;

Тут у меня в Image1 и Image2 разные картинки.
В чётные элементы списка отрисовывается Image2 а в нечётные соответственно Image1.

Это только пример, под свои нужды добей самостоятельно
Umen вне форума Ответить с цитированием
Старый 28.03.2007, 06:39   #3
Nez
Пользователь
 
Аватар для Nez
 
Регистрация: 15.01.2007
Сообщений: 72
По умолчанию

Это понятно, что не чистый код скопирую.. А вот такой вопрос, можно эти картинки "вжывить" в exe-шник, то есть, чтобы прога брала их не из папки, а вот прям из самой себя? Чтобы перетаскивать приходилось только один exe-шник??
Nez вне форума Ответить с цитированием
Старый 28.03.2007, 07:14   #4
Nez
Пользователь
 
Аватар для Nez
 
Регистрация: 15.01.2007
Сообщений: 72
По умолчанию

Неработает.. Начну с того, что я перепутал объект)) Он нажывается ComboBox) А вот если тоже самое сотворить с комбобоксом, то в строке не получаем никакого текста, а только растянутую во всю строку стрелочку.

Предидущий вопрос, вроде, снимается
Nez вне форума Ответить с цитированием
Старый 28.03.2007, 16:00   #5
Umen
Форумчанин
 
Аватар для Umen
 
Регистрация: 10.11.2006
Сообщений: 189
По умолчанию

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

Код:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
if index mod 2 = 0 then
  ComboBox1.Canvas.StretchDraw(Rect, Image1.Picture.Graphic);
if index mod 2 = 1 then
  ComboBox1.Canvas.StretchDraw(Rect, Image2.Picture.Graphic);
ComboBox1.Canvas.TextOut(rect.Left, rect.Top, ComboBox1.Items[index]);
end;
А насчёт рисунков в exe, так в моём способе они именно так и хранятся, просто делаешь ImageX.visible := false, чтобы их видно не было и всё (это чтобы с ресурсами не возиться)

Последний раз редактировалось Umen; 28.03.2007 в 19:28.
Umen вне форума Ответить с цитированием
Старый 28.03.2007, 16:46   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
Сообщение от Nez Посмотреть сообщение
Это понятно, что не чистый код скопирую.. А вот такой вопрос, можно эти картинки "вжывить" в exe-шник, то есть, чтобы прога брала их не из папки, а вот прям из самой себя? Чтобы перетаскивать приходилось только один exe-шник??
используй ресурсы. Информации по использованию ресурсов на форуме куча.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 29.03.2007, 00:03   #7
RSLoader
_________
Пользователь
 
Аватар для RSLoader
 
Регистрация: 27.03.2007
Сообщений: 69
По умолчанию

Если с ресурсами, то можно так:
Создай в блокноте файл, например, C:\PECYPC.RC, в котором укажи все картинки, которые хочешь воткнуть в ресурс:
KARTINKA BMPFILE адрествоейкартинки
Чтобы откомпилировать его в ресурс, набери в командной строке:
brcc32 C:\PECYPC.RC
Получишь файл C:\PECYPC.RES
Чтобы пользовать его, напиши в тексте программы {$R C:\PECYPC.RES}
Ну а дальше разберёшься:
Код:
implementation
{$R *.DFM}
{$R C:\PECYPC.RES}
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  ComboBox1.Style:=csOwnerDrawFixed;
  ComboBox1.Canvas.Fillrect(Rect);
  ComboBox1.Canvas.Draw(Rect.Left,Rect.Top,Image1.Picture.Graphic);
  ComboBox1.Canvas.TextOut(Rect.Left+Image1.Picture.Width,Rect.Top,ComboBox1.Items[Index]);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
  Res:TResourceStream;
begin
  Res:=TResourceStream.Create(HInstance,'KARTINKA','BMPFILE');
  Res.SavetoFile('KARTINKA.BMP');
  Res.Free;
  Image1.Picture.LoadFromFile('KARTINKA.BMP');
  ComboBox1.ItemHeight:=Image1.Picture.Height;
end;
RSLoader вне форума Ответить с цитированием
Старый 29.03.2007, 08:43   #8
Nez
Пользователь
 
Аватар для Nez
 
Регистрация: 15.01.2007
Сообщений: 72
По умолчанию

Спасибо.. Завтра только попробовать смогу, сегодня времени нету((
Nez вне форума Ответить с цитированием
Старый 29.03.2007, 14:55   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

бог ты мой ))) а для чего тогда timagelist :D и такое нельзя делать если картинки разные будут ComboBox1.ItemHeight:=Image1.Pictur e.Height; !!! надо в обработчике OnMeasureItem ! :D удачи, и никаких jpeg и т.п. только битмапы использовать
BOBAH13 вне форума Ответить с цитированием
Старый 30.03.2007, 11:58   #10
Nez
Пользователь
 
Аватар для Nez
 
Регистрация: 15.01.2007
Сообщений: 72
По умолчанию

А нельзя поподробнее???
Nez вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ListBox werser Помощь студентам 1 29.05.2008 22:32
ListBox Witaliy Общие вопросы Delphi 10 27.04.2008 17:15
Listbox Dexic Помощь студентам 1 24.06.2007 15:05
ListBox lin Помощь студентам 1 04.06.2007 13:46