Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в колонку DBGridEh вставить другой компонент 
:(
    Опции темы
Sponger
Дата 7.4.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



В библиотеке Jedi есть такой компонент как LED.

У меня есть поле мемо. Соответственно когда оно пустое LED = FALSE, а если не пустое LED = TRUE

Как его вставить в колонку DBGridEh чтобы он был виден во всех записях и на каждую запись принимал нужное значение.


PM MAIL   Вверх
sexton
Дата 7.4.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: 1
Всего: 9



А может лучше туда класть не компонент а изображения (глифы)?
PM MAIL WWW ICQ   Вверх
Sponger
Дата 10.4.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



тогда каким образом отображать картинки. Я никогда не делал этого.
PM MAIL   Вверх
sexton
Дата 11.4.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: 1
Всего: 9



RTFM!
1.
Цитата

Bitmap в StringGrid ячейке.

В обработчике события OnDrawCell элемента StringGrid поместите следующий код:

    with (Sender as TStringGrid) do 
    with Canvas do 
        begin 
        {...} 
        Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic); 
        {...} 
        end; 


Используйте метод Draw() или StretchDraw() класса TCanvas. Image1 - это TImage с предварительно загруженным в него bitmap-ом.


2.

Цитата

Помещение компонентов в StringGrid
Автор: Neil Rubenking

Некоторое время тому назад такой вопрос уже ставился: возможно ли поместить элемент управления, например, CheckBox или ComboBox внутрь компонента ...Grid. Я сегодня помозговал и нашел неплохую, на мой взгляд, технологию. Это работает! Вот решение для тех, кто этим интересуется:

При создании компонента (в обработчике OnCreate), создайте его объекты Objects[C,R], например TCheckBox.Create(Self). Имейте в виду, что вы должны присвоить ячейкам Cells[C,R] какие-либо значения прежде, чем чем вы сможете иметь доступ к Objects[C,R]. Установите у вновь созданного компонента свойство Visible в FALSE, а свойство parent в SELF. Осуществите другую необходимую инициализацию. Имейте в виду, что вы должны внести необходимые модули в список uses, если создаете тип компонента, которого нигде кроме как на форме нет.

Создайте процедуру, берущую координаты колонки/строки и правильно позиционирующую соотвествующий объект в пределах прямоугольника ячейки, например:
Код

procedure TForm1.FixObjPosn(vCol, vRow: LongInt); 
{Размещаем содержимое компонента в области прямоугольника ячейки} 
var 
  R: TRect; 
begin 
  R := StringGrid1.CellRect(vCol, vRow); 
  if StringGrid1.Objects[vCol, vRow] is TControl then 
    with TControl(StringGrid1.Objects[vCol, vRow]) do 
      if R.Right = R.Left then {прямоугольник ячейки невидим} 
        Visible := False 
      else 
      begin 
        InflateRect(R, -1, -1); 
        OffsetRect(R, StringGrid1.Left + 1, StringGrid1.Top + 1); 
        BoundsRect := R; 
        Visible := True; 
      end; 
end; 


смещение позиции необходимо, поскольку CellRect расчитывается относительно верхнего левого угла строки сетки, и родителем компонента является форма).

В обработчике события сетки OnSelectCell проверьте, располагается ли элемент Objects в текущей колонке Col и строке Row TControl - если так, установите его свойство visible в FALSE. Теперь вызовите процедуру установления координат из шага 2 для *НОВЫХ* Col и Row, передавая их из параметров обработчика события в параметры функции.

В обработчике OnTopLeftChanged просто вызовите FixObjPosn

В обработчике события OnDrawCell во-первых, если ячейка выбрана, EXIT. Если элемент ячейки Objects не TControl, также EXIT. В противном случае вам нужно создать код, обеспечивающий отрисовку "фасада" каждого типа элемента управления, которого вы разместили в сетке.

Обратите внимание на то, что если вы делаете что-либо с элементом управления, на который влияют ДРУГИЕ элементы управления (например, изменение статуса какой-либо радиокнопки из группы, или операции enable/disable), вы должны вызвать метод сетки Refresh.

Опс! Это звучит немного запутанно, но это работает. Успехов!


© drkb


PM MAIL WWW ICQ   Вверх
Sponger
Дата 11.4.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 14.2.2006

Репутация: нет
Всего: нет



Спасибо я уже сделал. В Delphi World есть вот такой пример

Код

procedure TForm1.DBGridEh2DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
var
  Im1: TBitmap;
begin
  Im1 := TBitmap.Create;
  if Column.FieldName = 'Glyph' then
    with DBGridEh2.Canvas do begin
      FillRect(Rect);
      if length(Form1.main.FieldValues['TranslateAList']) = 0 then 
        ImageList1.GetBitmap(0, Im1)
      else 
        ImageList1.GetBitmap(1, Im1);
      Draw(round((Rect.Left + Rect.Right - Im1.Width) / 2), Rect.Top + 2, Im1);
    end;
end;


В принципе это похоже на первую цитату

Это сообщение отредактировал(а) Sponger - 11.4.2006, 13:17
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.