Читаем Советы по Delphi. Версия 1.4.3 от 1.1.2001 полностью

 if not ((gdFixed in AState) and ((ARow = 0) and (dgTitles in Options) and (ACol <> 0))) then

  inherited DrawCell(ACol, ARow, ARect, AState)

 else begin

  if DefaultDrawing then begin

   DrawEdge(Canvas.Handle, ARect, BDR_RAISEDINNER, BF_BOTTOMLEFT);

   DrawEdge(Canvas.Handle, ARect, BDR_RAISEDINNER, BF_TOPRIGHT);

   InflateRect(ARect, -1, -1);

   Canvas.Brush.Color := FixedColor;

   Canvas.FillRect(ARect);

  end;

  TitleText := Columns[ACol - 1].Title.Caption;

  if Assigned(OnDrawTitle) then OnDrawTitle(ACol, ARect, TitleText);

  if DefaultDrawing and (TitleText <> '') then begin

   Canvas.Brush.Style := bsClear;

   Canvas.Font := RealTitleFont;

   if ACol > 0 then Al := Columns[ACol - 1].Title.Alignment

   else Al := Columns[0].Title.DefaultAlignment;

   WriteText(Canvas, ARect, 2, 2, TitleText, Al);

  end;

 end;

end;

procedure TBitDBGrid.SetRealTitleFont(Value : TFont);

begin

 FRealTitleFont.Assign(Value);

 Repaint;

end;

procedure Register;

begin

 RegisterComponents('Andre VCL', [TBitDBGrid]);

end;

initialization

 DrawBitmap := TBitmap.Create;

finalization

 DrawBitmap.Free;

end. 

<p>Несколько таблиц в одном TDBGrid</p>

Delphi 1 

Насколько я знаю, единственное легкое решение заключается в использовании вычисляемых полей.

Для того, чтобы поместить данные из нескольких таблиц в один DBGrid, нужно воспользоваться объектом TQuery. На заметку: используйте TQuery в режиме только для чтения, если вы не можете обеспечить гарантию выполнения некоторых из его руководящих принципов, один из которых – данные могут быть получены только от одной таблицы.

<p>Как сделать так, чтобы в DBGrid напротив некоторых строк можно было бы галочку поставить?</p>

Nomadic советует:

Ну примерно так (лишнее мало-мало порезал, больно много его, но идея видна :) на сервере — тaблицa Advertis.DB, первичный ключ ID — autoincrement. На локальном диске — тaблицa Founds.DB, с полем Advertis: integer, по которому есть индекс, и tblFounds.IndexFieldNames = 'Advertis'.

На гриде:

=== cut ===

procedure TMainForm.dbgWorkDblClick(Sender: TObject);

begin

 TriggerRowSelection;

end;

procedure TMainForm.TriggerRowSelection;

begin

 if dmFile.AdvertisCount <> 0 then begin

  with dmFile do if not tblFounds.FindKey([tblAdvertisID.Value]) then begin

   tblFounds.AppendRecord([tblAdvertisID.Value]);

  end else begin

   tblFounds.Delete;

  end;

  dbgWork.Refresh;

 end;

end;

procedure TMainForm.dbgWorkDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

 if DataCol = 0 then with dmFile, dbgWork.Canvas do begin

  FillRect(Rect); {clear the cell}

  if tblFounds.FindKey([tblAdvertisID.Value]) then begin

   TextOut(Rect.Left, Rect.Top, '?');

  end else begin

   TextOut(Rect.Left, Rect.Top, 'o');

  end;

 end;

end;

=== cut ===

Оказывается, я переопределял рисование гридa, а не вычислял поле. Не помню точно, но кажется, чтобы не перечитывать таблицу на каждый даблклик, а только перерисовать грид.

А колонка для галки в гриде определялась так:

=== cut ===

with dmFile, dbgWork.Columns do begin

 BeginUpdate;

 Clear;

 {check mark}

 nc := Add;

 nc.Width := 14;

 nc.Font.Name := 'Wingdings';

 nc.Font.Size := 11;

 nc.Alignment := taRightJustify;

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT