Главная страница
    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.45 MB
Время: 0.031 c
15-1172195067
Другой
2007-02-23 04:44
2007.03.18
История копирайта


2-1171876396
Прохожев Максим
2007-02-19 12:13
2007.03.18
Количество строк в проекте


15-1171614345
KSergey
2007-02-16 11:25
2007.03.18
Проверка перфоратора


15-1171745687
Cyrax
2007-02-17 23:54
2007.03.18
Есть ли проги для создания файла (физически в несколько байт)...


2-1172646093
San1
2007-02-28 10:01
2007.03.18
Дуга окружности





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский