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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2012, 08:32   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Какой компонент выбрать и как такое сделать?

Добрый день! Мне нужно реализовать такое: запросом из базы вытаскиваются некие строки с определенным условием. Напротив каждой строки, слева, должна отрисовываться соответствующая картинка, которая загружена в Image1 или из Image2. В зависимости от условий напротив одной и той же строки может рисоваться как картика из Image1 или Image2. Например.
Вот я вытащил запросом из базы данных строки:
Код:
 Form1.pFIBDataSet2.Active:=False;
 Form1.pFIBDataSet2.SelectSQL.Clear;
 Form1.pFIBDataSet2.SelectSQL.Text:='select * from RABOTNIKI';
 Form1.pFIBDataSet2.Active:=True;
В поле STATUS, для каждого работника, хранится его статус, который может принимать только либо значение 1, либо значение 0. Если значение в этом поле = 1, то загрузить напротив строки картинку из Image1. Если значение в этом поле = 0, то загрузить напротив строки картинку из Image2. Вот. Как и с помощью чего можно реализовать такое? Может есть какой компонент специальный для этого? Прошу помочь конструктивными советами.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 03.03.2012, 08:40   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

DbGrid событие OnDrawColumnCell в нем прорисовка смайликов с анализом данніх из текущей записи, например с использованием ImageList и DrawCellBitmap. Или другие дбгриды. Подождешь до вечера, код брошу, сейчас некогда
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 03.03.2012 в 08:44.
Аватар вне форума Ответить с цитированием
Старый 03.03.2012, 12:07   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Спасибо. Конечно подожду. Просто хочется такое реализовать.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 03.03.2012, 12:31   #4
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

вижу базу firebird..может в базе и хранить сразу фотки ..есть же возможность
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 03.03.2012, 13:10   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Да, верно, Firebird . Фотки и будут в базе храниться. Первый раз работаю с BLOB полями в этой СУБД, нравится . Я просто хотел, чтобы содержимое таких полей отображалось в ячейке DBGridEh-a.

Еще вопрос по теме: если грузить в базу сам RTF файл документа, то его можно будет потом без проблем загрузить в тот же RichEdit или просмотреть форматированный текст этого файла в том же DBRichEdit?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 03.03.2012, 18:42   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. В DBGrid фотки отображать не пробовал, а смайлы 16x16 без проблем
2. В ImageList набросать нужное кол-во bmp-смайлов
3. В грид явно определить колонки. Колонки для смайлов без фиелдов, но желательно с не пустым заголовком для идентификации колонки
4. DrawColumnCell отрабатывает для каждой ячейки
5. Процедура DrawCellBitmap из Rx, но спокойно можно и без неё
Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var i: Integer;
    Bitmap: TBitmap;
begin
  if TDBGrid(Sender).DataSource.DataSet.RecordCount=0 then Exit;
  i:=-1;  //в i индекс смайла в ImageList
  if (Column.Title.Caption='п') and (TDBGrid(Sender).DataSource.DataSet.FieldByName('Tip').AsInteger=1) then i:=0
  else if (Column.Title.Caption='п') and (TDBGrid(Sender).DataSource.DataSet.FieldByName('Tip').AsInteger=2) then i:=1;
  if i<>-1 then begin
    Bitmap:=TBitmap.Create;
    Bitmap.Transparent:=True;
    ImageList1.GetBitmap(i,Bitmap);
    TDBGrid(Sender).Canvas.Draw(Rect.Left,Rect.Top,Bitmap);
    Bitmap.Free;
  end;
end;
Фотку из базы лучше отображать не в гриде, а в отдельном Image или DBImage и только для текущей записи. Для Image
Код:
procedure TForm1.DataSetAfterScroll(DataSet: TDataSet);
var Stream: TMemoryStream;
begin
  Stream:=TMemoryStream.Create;
  TBlobField(DataSet.FieldByName('Foto')).SaveToStream(Stream);
  Image1.Picture.Bitmap.Assign(Stream);
  // или так, точно не помню Image1.Picture.Assign(Stream);
  Stream.Free;
end;
Если много записей выбирается в DataSet, то лучше не тянуть Blob-ы в DataSet, а каждый раз в AfterScroll брать из базы нужное Blob-поле

ADD Насчет Assign загнул. Там подойдет
Код:
  Stream.Position:=0;
  Image1.Picture.Bitmap.LoadFromStream(Stream);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 04.03.2012 в 17:38.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбрать запись с последней датой? Какой это запрос? Bendebej SQL, базы данных 3 23.03.2010 12:17
Какой компонент выбрать для более правильной работы с точки зрения программирования? (Delphi) Art_Divin Помощь студентам 3 09.03.2010 13:43
Какой выбрать компонент? Anna_fors Компоненты Delphi 4 27.02.2010 14:31
Какой компонент выбрать ? pashokq Компоненты Delphi 3 28.04.2009 22:24
Какой компонент выбрать для вывода таблицы картинок ICO Comer_Jus Мультимедиа в Delphi 3 21.05.2008 20:35