Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
15-1172344484
lookin
2007-02-24 22:14
2007.03.18
Немножко размышлений насчет восстановления формата данных


2-1172170402
Torin2
2007-02-22 21:53
2007.03.18
недоступно меню


3-1164308532
serko
2006-11-23 22:02
2007.03.18
Одновременная работа с базой...


2-1172153867
Lonix
2007-02-22 17:17
2007.03.18
Окно поверх всех окон


4-1162868692
Grademax
2006-11-07 06:04
2007.03.18
Как определить HWND кнопки расположенной на чужом окне





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский