Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.04.2015, 12:01
FreddyZSX FreddyZSX вне форума
Прохожий
 
Регистрация: 20.06.2014
Сообщения: 14
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию Цветные строки в ListBox и в файле

Подскажите, пожалуйста...

Как сделать
1. чтобы строки в ListBox по признаку, допустим bAlarm, закрашивались красным цветом?
2. При добавлении новой строки красная строка бы сдвигалась вместе со всем списком?
3. При сохранении и последующем чтении из файла в ListBox строки сохраняли свой цвет? (если возможно..)
Ответить с цитированием
  #2  
Старый 07.04.2015, 12:20
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ручная отрисовка
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 07.04.2015, 12:38
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Что такое "по признаку, допустим bAlarm"?

А так, вот пример из drkb
Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
 myBrush: TBrush;
begin
 myBrush := TBrush.Create;
 with (Control as TListBox) do
 begin
  if Items[index] = 'bAlarm'  then
  myBrush.Color := clRed else myBrush.Color := clWhite;
  myBrush.Style := bsSolid;
  Windows.FillRect(Canvas.Handle, Rect, myBrush.Handle);
  Brush.Style := bsClear;
  Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]);
  MyBrush.Free;
 end;
end;
чтоб это заработало, выставите свойство Style как lbOwnerDrawFixed
Ответить с цитированием
  #4  
Старый 07.04.2015, 12:53
FreddyZSX FreddyZSX вне форума
Прохожий
 
Регистрация: 20.06.2014
Сообщения: 14
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Спасибо всем, разобрался!
помогло:
http://www.cyberforum.ru/delphi-begi...tml#post614684
Ответить с цитированием
  #5  
Старый 07.04.2015, 13:10
FreddyZSX FreddyZSX вне форума
Прохожий
 
Регистрация: 20.06.2014
Сообщения: 14
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Хорошо в ListBox цветные кнопки пишутся...
А как же их сохранять в файл и потом при загрузке из файла в ListBox строки сохраняли свои цвета?
Ответить с цитированием
  #6  
Старый 07.04.2015, 14:15
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Есть несколько вариантов, конкретно - показывайте свой код, и по нему можно определить какой из них подойдёт больше всего
Ответить с цитированием
  #7  
Старый 07.04.2015, 14:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от FreddyZSX
Хорошо в ListBox цветные кнопки пишутся...
А как же их сохранять в файл и потом при загрузке из файла в ListBox строки сохраняли свои цвета?
например как это делают в html
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 07.04.2015, 14:24
FreddyZSX FreddyZSX вне форума
Прохожий
 
Регистрация: 20.06.2014
Сообщения: 14
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

В ListBox есть цветные строки.
Добавляю так:
Код:
  ListBox1.Items.AddObject(aStr, TObject(aColor));

и в методе DrawItem так:
Код:
 with ListBox1.Canvas do begin
    //Извлекаем сведения о цвете фона и задаём для кисти этот цвет.
    Brush.Color := TColor( ListBox1.Items.Objects[Index] );
    //Закрашиваем прямоугольник, в который потом будет выведена строка.
    FillRect(Rect);
    //Выводим текст строки.
    TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);
  end;
Вопрос:
как же сохранить их в файл и потом при загрузке из файла в ListBox строки сохраняли свои цвета?
При
Код:
ListBox1.Items.SaveToFile('h:\qqq.txt'); 

сохраняется только текст и цвет теряется.... При загрузке из файла в ListBox строки все одинаковые... Не ужели только приклеивать к строке какие то данные-потом их декодировать и т.д. - гемор! может есть метод более красивый подход?.
Ответить с цитированием
  #9  
Старый 07.04.2015, 15:13
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Нарисовались такие процедуры сохранения\загрузки
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 i : integer;
 sl: TStrings;
begin
 sl:= TStringList.Create;
 sl.Assign(ListBox1.Items);

 for i:= 0 to sl.Count -1 do
  sl[i]:= ColorToString(TColor(sl.Objects[i]))+' '+sl[i];
 sl.SaveToFile('qqq.txt');
 sl.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
sl: TStrings;
begin
sl:= TStringList.Create;
sl.LoadFromFile('qqq.txt');
with ListBox1 do
 begin
  Clear;
  for i:= 0 to sl.Count -1 do
   Items.AddObject(Copy(sl[i],Pos(' ',sl[i])+1,Length(sl[i])),
    TObject(StringToColor(Copy(sl[i],1,Pos(' ',sl[i])-1))));
 end;
 sl.Free;
end;
Проверил, работает

Последний раз редактировалось Alegun, 07.04.2015 в 15:16.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Gareth (19.04.2016)
  #10  
Старый 07.04.2015, 15:51
FreddyZSX FreddyZSX вне форума
Прохожий
 
Регистрация: 20.06.2014
Сообщения: 14
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Вот ЧЕЛОВЕЧИЩЕ! Спасибо....
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:52.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter