Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBGrid


Страницы:   1 2 3

Slimer ©   (2006-12-21 11:45:00) 

Как в run-time изменить ширину толбца таблицы DBGrid по длине заголовка столбца, или по максимально длинному значению в какой либо ячейке данного столбца?


Германн   (2006-12-22 01:41:00) [1]


> Anatoly Podgoretsky ©   (21.12.06 23:20) [41]
>
> > Slimer  (21.12.2006 23:14:40)  [40]
>
> Сказано же было заменить на знак больше, а ты на что сменил,
>  на d>= ну и зачем делать присвоение ри равенстве?

Акела промахнулся? :-)
В [40] увеличение ширины происходит только при "<"


Anatoly Podgoretsky   (2006-12-22 01:29:00) [2]

> Slimer  (21.12.2006 23:40:42)  [42]

Ну так тебе было сказано заменить на знак >, а не на >=
Еще не поздно.


Slimer   (2006-12-21 23:40:00) [3]


> Сказано же было заменить на знак больше, а ты на что сменил,
>  на d>= ну и зачем делать присвоение ри равенстве?

Вобщем-то не знаю почему, но пока не помнял на >= ничего не работало:)


Anatoly Podgoretsky   (2006-12-21 23:20:00) [4]

> Slimer  (21.12.2006 23:14:40)  [40]

Сказано же было заменить на знак больше, а ты на что сменил, на d>= ну и зачем делать присвоение ри равенстве?


Slimer   (2006-12-21 23:14:00) [5]

Итак, господа програмисты, с большооооой радостью хочу Вам сообщить что функция ЗАРАБОТАЛА!!!
Может она и не будет так сильно востребована в таблице, но она не работала и это не давало мне спокойно жить:)
Вот код абсолютно рабочей на 100% функции:
procedure TForm2.N2Click(Sender: TObject);
var c,d:integer;
begin
if i0 then
begin
 for c:=0 to Table1.Fields.Count-1 do
 begin
   d:=0;
   Table1.First;
    while not Table1.Eof do
     begin
         if d>=DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].AsString) then
           Table1.Next
          else
           begin
           d:=DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].AsString);
           Table1.Next;
           end;
     end;
DBGrid1.Columns.Items[c].Width:=d+5;
 end;
Table1.First;
end
else
begin
ShowMessage('Áàçà äàííûõ íå îòêðûòà!');
end;

end;


Плохиш   (2006-12-21 22:27:00) [6]


> Slimer ©   (21.12.06 22:18) [38]

Не буду я ничего объяснять, потому что это будет бессмысленное топтание кнопок. Ты всё-равно основ не знаешь, иди читай основы программирования и синтаксис паскаля (в частности описания операторов циклов).

PS. У тебя 17 полей в таблице :-)


Slimer   (2006-12-21 22:18:00) [7]

Теперь два варианта.
procedure TForm2.N2Click(Sender: TObject);
var c,d:integer;
begin
if i0 then
begin
 for c:=0 to Table1.Fields.Count-1 do
 begin
   Table1.First;
   d:=0;
    while not Table1.Eof do
     begin
         if d


Плохиш   (2006-12-21 22:14:00) [8]

Так у него и в первом случая EOF стоит - двойной ужас...


Anatoly Podgoretsky   (2006-12-21 21:36:00) [9]

> Slimer  (21.12.2006 21:29:35)  [35]

while not EOF do;

В данном контесте оначает, что консоль (файл input) н доступно в GUI приложении.
В даном контесте использование даной функции абсурд, ты наверно хотел

while not Table1.EOF do;

и без ; и совместно с операторным скобкми.
И то и другое смотрится абсурдом, тебе еще повезло, что это откомпилировалось вообще.

Обычно в данном случае у нас говоят

Ужас


Slimer   (2006-12-21 21:29:00) [10]


> Ужасть, а не код :-( Почему бы не использовать цикл while?


Без разницы! Тут дело не в операторе, и не в цикле...
Пишу:
procedure TForm2.N2Click(Sender: TObject);
var c,d:integer;
begin
if i0 then
begin
 for c:=0 to Table1.Fields.Count-1 do
 begin
   Table1.First;
   d:=1;
    while not EOF do;
     begin
         if d


Плохиш   (2006-12-21 21:02:00) [11]


>     if not EOF then
>      begin
>        repeat
>          if d<DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].
> AsString) then
>            Table1.Next
>           else
>            begin
>            d:=DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].
> AsString);
>            Table1.Next;
>            end;
>        until eof;
>      end;

Ужасть, а не код :-( Почему бы не использовать цикл while?


Anatoly Podgoretsky   (2006-12-21 19:14:00) [12]

> Anatoly Podgoretsky  (21.12.2006 19:14:32)  [32]

Или поменяй местами операнды в операции отношения


Anatoly Podgoretsky   (2006-12-21 19:14:00) [13]

> Slimer  (21.12.2006 19:10:31)  [31]

Конечно не будет, поскольку неверный оператор отношения, замеи на больше


Slimer   (2006-12-21 19:10:00) [14]

Все нормально уже работает если сделать в конце +5:)
Теперь другая проблемма. Это мы устанавливали ширину в зависимости от текста заголовка таблицы, а теперь мне надо установить по максимально большому слову любой из ячеек данной колонки.
Пишу так:
procedure TForm2.N2Click(Sender: TObject);
var c,d:integer;
begin
if i0 then //если открыта база
begin
 for c:=0 to Table1.Fields.Count-1 do
 begin
   Table1.First;
   d:=1;
    if not EOF then
     begin
       repeat
         if d


Anatoly Podgoretsky   (2006-12-21 18:08:00) [15]

> Slimer  (21.12.2006 18:05:29)  [29]

Так ширина колонки это не только текст, но и отступы.


Slimer   (2006-12-21 18:05:00) [16]

Ага. Действительно
DBGrid1.Columns.Items[c].Width:= DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].FieldName);
И все отлично заработало, но что-то всеравно колонка не по тексту выравнивается. а немного обрезает текст заголовка


Anatoly Podgoretsky   (2006-12-21 17:50:00) [17]

> Slimer  (21.12.2006 17:23:27)  [27]

Еще раз читать справку, не только заголовок функции, но и ее описание.


Slimer   (2006-12-21 17:23:00) [18]

Да, смотрел.
Там все просто function TextWidth(Text: string): double;
Пусть она хоть дабл, хоть риал возвращает! Почему делфи не понимает эту функцию? Пишет Undeclared identifier


Anatoly Podgoretsky   (2006-12-21 17:16:00) [19]

> Slimer  (21.12.2006 17:08:25)  [25]

Справку по функции смотрел?


Slimer   (2006-12-21 17:08:00) [20]

for c:=0 to DBGrid1.Columns.Count-1 do
DBGrid1.Columns.Items[c].Width:= TextWidth (DBGrid1.Fields[c].Value);

Все что получилось.
Однако не понимает TextWidth никак.
Может в uses надо что-то включить еще?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо