Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
ВнизDBGrid Найти похожие ветки
← →
Slimer © (2006-12-21 11:45) [0]Как в run-time изменить ширину толбца таблицы DBGrid по длине заголовка столбца, или по максимально длинному значению в какой либо ячейке данного столбца?
← →
Anatoly Podgoretsky © (2006-12-21 12:06) [1]> Slimer (21.12.2006 11:45:00) [0]
И то и другое Column.width
← →
Slimer © (2006-12-21 14:34) [2]
> И то и другое Column.width
В DBGrid.columns нет свойства width!!!
← →
Anatoly Podgoretsky © (2006-12-21 15:11) [3]> Slimer (21.12.2006 14:34:02) [2]
Читать внимательно, я говорил про TColumn
← →
Slimer © (2006-12-21 15:24) [4]А можно привести просто пример кода как это сделать?
А то у меня что-то не получается:(
← →
Anatoly Podgoretsky © (2006-12-21 15:30) [5]Смотри свойство Items у DBGrid.columns (можно опускать), кроме того у тебя наверно и Дельфи есть, соответственно есть и редактор, так вот там можно написать, только учти что DBGrid.columns это коллекция, то потребуется индекс, вот после него набей точку и нажми Ctrl+Space
или в конце концов взгляни наконец в справку.
← →
Slimer © (2006-12-21 15:41) [6]Ты думаешь я справку не смотрел? Думаешь я просто сижу и при малейшем вопросе сразу начинаю всех просить помочь??? Я с утра с самого пытаюсь сделать эту хрень а она не работает! Я ж не виноват что у меня еще опыта маловато!
Вот пишу следующее:procedure TForm1.Button1Click(Sender: TObject);
var t: TColumn;
c:integer;
begin
for c:=0 to DBGrid1.Columns.Count-1 do
begin
t:=TColumn.Create(DBGrid1.Columns);
t.Width:=strtoint (Table1.Fields[c].FieldName.Length);
end;
end;
и естественно ошибка. Как ее исправить?
← →
Slimer © (2006-12-21 15:44) [7]Даже вот так будет правильней:
procedure TForm1.Button1Click(Sender: TObject);
var t: TColumn;
c:integer;
begin
for c:=0 to DBGrid1.Columns.Count-1 do
begin
t:=TColumn.Create(DBGrid1.Columns);
t.Width:=Table1.Fields[c].FieldName.Length;
end;
end;
но всеравно не работает... Надо как-то по другому
← →
vitv © (2006-12-21 15:48) [8]procedure TForm1.Button1Click(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.DisableControls;
TStringGrid(DBGrid1).DefaultRowHeight := 55;
DBGrid1.DataSource.DataSet.EnableControls;
end;
← →
Плохиш © (2006-12-21 15:50) [9]
> t:=TColumn.Create(DBGrid1.Columns);
Это ты где такое вычитал?
← →
Slimer © (2006-12-21 15:53) [10]
>
> > t:=TColumn.Create(DBGrid1.Columns);
>
> Это ты где такое вычитал?
Как где? Подгорецкий посоветовал:)
← →
Плохиш © (2006-12-21 15:55) [11]
> Slimer © (21.12.06 15:53) [10]
> Как где? Подгорецкий посоветовал
Не ври, он этого не советовал. И в справке, в которую он тебя послал, то же такого не советовали.
← →
Slimer © (2006-12-21 15:57) [12]
> vitv © (21.12.06 15:48) [8]
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> DBGrid1.DataSource.DataSet.DisableControls;
> TStringGrid(DBGrid1).DefaultRowHeight := 55;
> DBGrid1.DataSource.DataSet.EnableControls;
> end;
Читай внимательно: мне нужно именить не высоту строки а ширину. чтоб она ровнялась длине заголовка столбца или максимальной длинне данных в самой длинной ячейке этого столбца.
← →
Slimer © (2006-12-21 16:00) [13]
> Не ври, он этого не советовал. И в справке, в которую он
> тебя послал, то же такого не советовали.
Ну может он когда советовал то имел ввиду что-то другое, но я это понял так:) И так оно получилось. но не работает.
Да может хоть кто-то просто привести пример кода и все!!! Я сразу пойму как это должно работать, а не тыкать вечно в эту хренову справку! Если б она еще на русском была, а так я еще не понимаю что там наклацано на забугорском!
← →
Anatoly Podgoretsky © (2006-12-21 16:01) [14]> Slimer (21.12.2006 15:44:07) [7]
Зачем ты пытаешься создавать созданое.
Быстро марш в справку по указанным ключевым словам.
← →
Slimer © (2006-12-21 16:15) [15]Таааак:) Отличненько... с одним справились:)
Процедура упростилась до неймоверных размеров:) Ура! Как грицца краткость-сестра таланта:)procedure TForm1.Button1Click(Sender: TObject);
var c:integer;
begin
for c:=0 to DBGrid1.Columns.Count-1 do
DBGrid1.Columns.Items[c].Width:=30;
end;
Теперь растолкуйте мне пожалуйста, как вместо 30, написать то что мне нужно?
← →
Anatoly Podgoretsky © (2006-12-21 16:24) [16]> Slimer (21.12.2006 16:15:15) [15]
Например так
DBGrid1.Columns[c].Width := 33;
← →
Плохиш © (2006-12-21 16:24) [17]
> Slimer © (21.12.06 16:15) [15]
> Теперь растолкуйте мне пожалуйста, как вместо 30, написать
> то что мне нужно?
Делается просто: выходишь во двор, надеваешь халат, берёшь рабочий инструмент и начинаешь, в конце концов, выполнять свои прямые обязанности.
← →
Slimer © (2006-12-21 16:26) [18]
> > Slimer (21.12.2006 16:15:15) [15]
>
> Например так
>
> DBGrid1.Columns[c].Width := 33;
??? Не думал что вы меня настолько тупым считаете!
Я имею ввиду как можно определить длину строки заголовка столбца? А подставить значение вместо 30 я и сам могу
← →
Anatoly Podgoretsky © (2006-12-21 16:29) [19]> Slimer (21.12.2006 16:26:18) [18]
длина_заголовка_столбца := DBGrid1.Columns[c].Width
← →
Slimer © (2006-12-21 16:34) [20]
> > Slimer (21.12.2006 16:26:18) [18]
>
> длина_заголовка_столбца := DBGrid1.Columns[c].Width
У меня складывается впечатление что вы либо не понимаете мой вопрос либо издеваетесь надо мной! Мне нужно чтоб ширина столбца устанавливалась по тексту заголовка! Т.е. в зависимости от того насколько длинное слово в заголовке столбца.
← →
Плохиш © (2006-12-21 16:37) [21]дбгрид1.цокумнс[c].дисплынаме + ф1
PS. какой догадливый, аднака :-)
← →
Slimer © (2006-12-21 16:50) [22]
> дбгрид1.цокумнс[c].дисплынаме + ф1
>
> PS. какой догадливый, аднака :-)
В справке такого я не нашел. Как можно определить длину слова в рх чтоб по этому слову выровнять колонку?
← →
Anatoly Podgoretsky © (2006-12-21 16:52) [23]> Slimer (21.12.2006 16:34:20) [20]
Как задашь вопрос, так и получишь ответ, в народной мудрости "каков вопрос, таков и ответ"
← →
Anatoly Podgoretsky © (2006-12-21 16:53) [24]> Slimer (21.12.2006 16:50:22) [22]
Это уже другой вопрос и другая функция/свойство TextWidth
Смотреть там же, в справке
← →
Slimer © (2006-12-21 17:08) [25]
for c:=0 to DBGrid1.Columns.Count-1 do
DBGrid1.Columns.Items[c].Width:= TextWidth (DBGrid1.Fields[c].Value);
Все что получилось.
Однако не понимает TextWidth никак.
Может в uses надо что-то включить еще?
← →
Anatoly Podgoretsky © (2006-12-21 17:16) [26]> Slimer (21.12.2006 17:08:25) [25]
Справку по функции смотрел?
← →
Slimer © (2006-12-21 17:23) [27]Да, смотрел.
Там все просто function TextWidth(Text: string): double;
Пусть она хоть дабл, хоть риал возвращает! Почему делфи не понимает эту функцию? Пишет Undeclared identifier
← →
Anatoly Podgoretsky © (2006-12-21 17:50) [28]> Slimer (21.12.2006 17:23:27) [27]
Еще раз читать справку, не только заголовок функции, но и ее описание.
← →
Slimer © (2006-12-21 18:05) [29]Ага. Действительно
DBGrid1.Columns.Items[c].Width:= DBGrid1.Canvas.TextWidth(DBGrid1.Fields[c].FieldName);
И все отлично заработало, но что-то всеравно колонка не по тексту выравнивается. а немного обрезает текст заголовка
← →
Anatoly Podgoretsky © (2006-12-21 18:08) [30]> Slimer (21.12.2006 18:05:29) [29]
Так ширина колонки это не только текст, но и отступы.
← →
Slimer © (2006-12-21 19:10) [31]Все нормально уже работает если сделать в конце +5:)
Теперь другая проблемма. Это мы устанавливали ширину в зависимости от текста заголовка таблицы, а теперь мне надо установить по максимально большому слову любой из ячеек данной колонки.
Пишу так:procedure TForm2.N2Click(Sender: TObject);
var c,d:integer;
begin
if i<>0 then //если открыта база
begin
for c:=0 to Table1.Fields.Count-1 do
begin
Table1.First;
d:=1;
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;
end;
DBGrid1.Columns.Items[c].Width:=d+5;
end
else
begin
ShowMessage("Áàçà äàííûõ íå îòêðûòà!");
end;
end;
Ну и как вы уже догадались - ничего не работает
← →
Anatoly Podgoretsky © (2006-12-21 19:14) [32]> Slimer (21.12.2006 19:10:31) [31]
Конечно не будет, поскольку неверный оператор отношения, замеи на больше
← →
Anatoly Podgoretsky © (2006-12-21 19:14) [33]> Anatoly Podgoretsky (21.12.2006 19:14:32) [32]
Или поменяй местами операнды в операции отношения
← →
Плохиш © (2006-12-21 21:02) [34]
> 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?
← →
Slimer © (2006-12-21 21:29) [35]
> Ужасть, а не код :-( Почему бы не использовать цикл while?
Без разницы! Тут дело не в операторе, и не в цикле...
Пишу:procedure TForm2.N2Click(Sender: TObject);
var c,d:integer;
begin
if i<>0 then
begin
for c:=0 to Table1.Fields.Count-1 do
begin
Table1.First;
d:=1;
while not 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;
end;
DBGrid1.Columns.Items[c].Width:=d+5;
end
else
begin
ShowMessage("Áàçà äàííûõ íå îòêðûòà!");
end;
end;
Выдает ошибку "I/O error 6"
При этом выделяет строкуwhile not EOF do;
← →
Anatoly Podgoretsky © (2006-12-21 21:36) [36]> Slimer (21.12.2006 21:29:35) [35]
while not EOF do;
В данном контесте оначает, что консоль (файл input) н доступно в GUI приложении.
В даном контесте использование даной функции абсурд, ты наверно хотел
while not Table1.EOF do;
и без ; и совместно с операторным скобкми.
И то и другое смотрится абсурдом, тебе еще повезло, что это откомпилировалось вообще.
Обычно в данном случае у нас говоят
Ужас
← →
Плохиш © (2006-12-21 22:14) [37]Так у него и в первом случая EOF стоит - двойной ужас...
← →
Slimer © (2006-12-21 22:18) [38]Теперь два варианта.
procedure TForm2.N2Click(Sender: TObject);
var c,d:integer;
begin
if i<>0 then
begin
for c:=0 to Table1.Fields.Count-1 do
begin
Table1.First;
d:=0;
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;
end;
DBGrid1.Columns.Items[c].Width:=d+5;
end
else
begin
ShowMessage("Áàçà äàííûõ íå îòêðûòà!");
end;
end;
Если в таком виде - то программа при выполнении это процедуры зависает
Если после строкfor c:=0 to Table1.Fields.Count-1 do
иwhile not Table1.Eof do
поставить ; то выдается ошибка List index out of bonds (17)
← →
Плохиш © (2006-12-21 22:27) [39]
> Slimer © (21.12.06 22:18) [38]
Не буду я ничего объяснять, потому что это будет бессмысленное топтание кнопок. Ты всё-равно основ не знаешь, иди читай основы программирования и синтаксис паскаля (в частности описания операторов циклов).
PS. У тебя 17 полей в таблице :-)
← →
Slimer © (2006-12-21 23:14) [40]Итак, господа програмисты, с большооооой радостью хочу Вам сообщить что функция ЗАРАБОТАЛА!!!
Может она и не будет так сильно востребована в таблице, но она не работала и это не давало мне спокойно жить:)
Вот код абсолютно рабочей на 100% функции:procedure TForm2.N2Click(Sender: TObject);
var c,d:integer;
begin
if i<>0 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;
← →
Anatoly Podgoretsky © (2006-12-21 23:20) [41]> Slimer (21.12.2006 23:14:40) [40]
Сказано же было заменить на знак больше, а ты на что сменил, на d>= ну и зачем делать присвоение ри равенстве?
← →
Slimer © (2006-12-21 23:40) [42]
> Сказано же было заменить на знак больше, а ты на что сменил,
> на d>= ну и зачем делать присвоение ри равенстве?
Вобщем-то не знаю почему, но пока не помнял на >= ничего не работало:)
← →
Anatoly Podgoretsky © (2006-12-22 01:29) [43]> Slimer (21.12.2006 23:40:42) [42]
Ну так тебе было сказано заменить на знак >, а не на >=
Еще не поздно.
← →
Германн © (2006-12-22 01:41) [44]
> Anatoly Podgoretsky © (21.12.06 23:20) [41]
>
> > Slimer (21.12.2006 23:14:40) [40]
>
> Сказано же было заменить на знак больше, а ты на что сменил,
> на d>= ну и зачем делать присвоение ри равенстве?
Акела промахнулся? :-)
В [40] увеличение ширины происходит только при "<"
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.015 c