Главная страница
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.043 c
15-1171987222
Ricks
2007-02-20 19:00
2007.03.18
Великий и могучий........


6-1160050855
Ruta
2006-10-05 16:20
2007.03.18
запуск проги на удал. компутере.


2-1172070527
<bbb>
2007-02-21 18:08
2007.03.18
ActiveX и Delphi


2-1172252904
rar
2007-02-23 20:48
2007.03.18
преобразовть формат DateTime


3-1166325991
O.O
2006-12-17 06:26
2007.03.18
for select и delete