Главная страница
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.48 MB
Время: 0.068 c
3-1167016258
r9000
2006-12-25 06:10
2007.03.18
Помогите пожалуйста правильно составить запрос.


15-1172269747
Германн
2007-02-24 01:29
2007.03.18
Справка в BDS2006


11-1150872641
parovoZZ
2006-06-21 10:50
2007.03.18
fbsToolWindow - есть вопросы


15-1172066499
Двоишник
2007-02-21 17:01
2007.03.18
Assembler - программирование циклических процессов


9-1144574516
ArtemESC
2006-04-09 13:21
2007.03.18
Открытые форматы моделей 3D...