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

  DrawText(Canvas.Handle, Buf, -1, Rect, DT_SINGLELINE or DT_VCENTER or DT_NOCLIP or DT_LEFT);

 end;

end;

– Jeff Fisher 

Один щелчок на StringGrid вместо трех

Как сделать так, чтобы после ПЕРВОГО щелчка на ячейке возможно было бы начать редактировать ее содержимое?

Включите goAlwaysShowEditor в свойство TStringGrid Options.

– Rick Rogers

StringGrid как DBGrid

Delphi 1

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

table.first;

row := 0;

grid.rowcount := table.recordCount;

while not table.eof do begin

 for i := 0 to table.fieldCount-1 do

  grid.cells[i,row] := table.fields[i].asString;

 inc(row);

 table.next;

end;

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

PROCEDURE TformLookupDB.FillCells;

VAR

 Row, i :INTEGER

 w      :INTEGER

 grid   :TStringGrid

BEGIN

 doGrid.RowCount := 0;

 IF NOT ASSIGNED(fDB) THEN EXIT;

 Row := 0;

 FOR i := LOW(fColWidths) TO HIGH(fColWidths) DO fColWidths[i] := 100

 // Данный временный объект-сетка используется для предохранения от огромного

 // количества подразумеваемых событий Application.ProcessMessages,

 // инициируемых базой данных, и вызывающих противное моргание объекта

 // doGrid. Итак, мы загружаем данные в объект-сетку

 // и затем копируем их в стобцы, начиная с верхней части.

 grid := TStringGrid.Create(Self);

 grid.Visible := FALSE;

 WITH fDB DO TRY

  grid.ColCount := fFields.Count;

  DisableControls;

  // Фильтр был установлен с помощью свойства Self.Filter

  First;

  WHILE NOT EOF DO TRY

   grid.RowCount := Row+1;

   FOR i := 0 TO grid.ColCount-1 DO BEGIN

    grid.Cells[i,Row] :=FieldByName(fFields.Strings[i]).AsString

    w := doGrid.Canvas.TEXTWIDTH(grid.Cells[i,Row]);

    IF fColWidths[i]THEN fColWidths[i] := w;

   END

   INC(Row);

  FINALLY

   Next;

  END

 FINALLY

  doGrid.RowCount := grid.RowCount;

  doGrid.ColCount := grid.ColCount;

  FOR i := 0 TO grid.ColCount-1 DO BEGIN

   doGrid.Cols[i] := grid.Cols[i];

   doGrid.ColWidths[i] := fColWidths[i] + 4

  END

  grid.Free;

  EnableControls

 END

END; 

`Авторазмер` для StringGrid

…да, реально это утомляет, но эту проблему можно решить программным путем (это нужно делать после того, как вы загрузите данные, или же, если вы загружаете данные по столбцам, их загружать в самом цикле, приведенном ниже):

i, j, temp, max: integer;

for i := 0 to grid.colcount-1 do begin

 max := 0;

 for j := 0 to grid.rowcount-1 do begin

  temp := grid.canvas.textWidth(grid.cells[i,j]);

  if temp > max then max := temp;

 end;

 grid.colWidths[i] := max + grid.gridLineWidth +1;

end;

Вероятно, вам необходимо будет добавить +1, чтобы текст не прилипал к границам ячеек.

Выравнивание колонок StringGrid III

Вот некоторый код, который делает то, что вы хотите:

procedure WriteText(ACanvas: TCanvas; const ARect: TRect; DX, DY: Integer; const Text: string; Format: Word);

var

 S: array[0..255] of Char;

 B, R: TRect;

begin

 with ACanvas, ARect do begin

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

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

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT