Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Даже самому смешно:)   Найти похожие ветки 

 
Slimer ©   (2007-02-23 18:18) [0]

Привет всем!
Есть DBGrid с записями. Естественно они разные по длинне, поэтому написал процедуру для выравнивания ширины колонок по максимальному значению в этой колонке.

procedure TForm1.Button3Click(Sender: TObject);
var c, d: integer;
begin
for c:=0 to Table1.Fields.Count-1 do
 begin

if Table1.Fields[c].Visible then //вот этот ИФ поидее должен пропускать
   begin                              //невидимую колонку
   d:=0;
   Table1.First;
   while not Table1.Eof do
     begin
         if (d>DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].AsString)) and
           (d>DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].DisplayLabel)) then
           Table1.Next
         else
           begin
           if DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].DisplayLabel)>DBGrid1.Canvas.TextWidt h(DBGrid1.Fields[c].AsString) then
           d:=DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].DisplayLabel)
           else
           d:=DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].AsString);
           Table1.Next;
           end;
     end;
 DBGrid1.Columns.Items[c].Width:=d+5;

end;
end;
Table1.First;
end;

но почему-то выдает ошибку при обращении к канвасу ДБГрида, а именно на строке
if (d>DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].AsString)) and
Подскажите что исправить? А то я что-то вообще ничего не могу понять


 
Ega23 ©   (2007-02-23 18:37) [1]

Ужас...


 
RASkov   (2007-02-23 18:43) [2]

var N, J, W: Integer;
begin
 Table1.DisableControls;
 try
 for N := 0 to DBGrid1.Columns.Count-1 do begin
  Table1.First; W:=0;
  while not Table1.Eof do begin
   J:=DBGrid1.Canvas.TextWidth(DBGrid1.Columns[N].Field.AsString);
   if J>W then W:=J+5;
   Table1.Next;
  end;
  DBGrid1.Columns[N].Width:=W;
 end;
 finally
  Table1.EnableControls;
 end;
end;


 
RASkov   (2007-02-23 18:50) [3]

Но этот метод не будет правильно работать если имет место быть OnDrawColumnCell и в нем имеются изменения размера шрифта...


 
RASkov   (2007-02-23 18:55) [4]

С учетом названий колонок немного изменить:
.....
for N := 0 to DBGrid1.Columns.Count-1 do begin
  Table1.First; W:=DBGrid1.Canvas.TextWidth(DBGrid1.Columns[N].Title.Caption)+5;
  while not Table1.Eof do begin
.......


 
Slimer ©   (2007-02-23 19:10) [5]

RASkov, спасибо!
Все ок. Работает на ура!



Страницы: 1 вся ветка

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.066 c
3-1166690839
DelphiLexx
2006-12-21 11:47
2007.03.18
Как правильно спроектировать новую таблицу


2-1172581748
Ega23
2007-02-27 16:09
2007.03.18
SetFocus - как узнать в данный момент


2-1172651336
Alex7
2007-02-28 11:28
2007.03.18
Переименование модуля


2-1172248355
Sfelt
2007-02-23 19:32
2007.03.18
Сохранение изображения


2-1172232151
deras
2007-02-23 15:02
2007.03.18
Цветной DBGrid