Форум: "Базы";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
ВнизПосоветуйте событие для отработки процедуры Найти похожие ветки
← →
Lt (2003-07-29 13:08) [0]Есть TDBGridEh, связанный с TTable и TDataSet, есть процедура автоподбора ширины столбца в зависимости от ширины содержимого ячейки. Нужно - чтоб эта процедура отработала сразу после того, как пользователь ввел значение в грид (ширина введенного текста может быть больше ширины столбца грида). Посоветуйте - на какое событие повесить процедуру (на грид, на таблицу или на датасет)?
Код прилагается:
procedure TfrmMain.btnHClick(Sender: TObject);
var
WidthMax, WidthField, WidthTitle: Integer;
I: Byte;
begin
with DBGridEh1, dmMain.tblMain do
begin
for I := 0 to Columns.Count - 1 do
begin
WidthMax := 0;
DisableControls;
if I = 0 then WidthMax := 20
else
begin
First;
while not EOF do
begin
WidthField := Canvas.TextWidth(Columns[I].Field.DisplayText);
WidthTitle := Canvas.TextWidth(Columns[I].Title.Caption);
if WidthField < WidthTitle then
if Columns[I].Title.SortMarker = smNoneEh then WidthField := WidthTitle
else WidthField := WidthTitle + 16
else
if (Columns[I].ButtonStyle = cbsEllipsis) or
(Columns[I].ButtonStyle = cbsDropDown) or
( Columns[I].ButtonStyle = cbsAuto) Есть TDBGridEh, связанный с TTable и TDataSet, есть процедура автоподбора ширины столбца в зависимости от ширины содержимого ячейки. Нужно - чтоб эта процедура отработала сразу после того, как пользователь ввел значение в грид (ширина введенного текста может быть больше ширины столбца грида). Посоветуйте - на какое событие повесить процедуру (на грид, на таблицу или на датасет)?
Код прилагается:
procedure TfrmMain.btnHClick(Sender: TObject);
var
WidthMax, WidthField, WidthTitle: Integer;
I: Byte;
begin
with DBGridEh1, dmMain.tblMain do
begin
for I := 0 to Columns.Count - 1 do
begin
WidthMax := 0;
DisableControls;
if I = 0 then WidthMax := 20
else
begin
First;
while not EOF do
begin
WidthField := Canvas.TextWidth(Columns[I].Field.DisplayText);
WidthTitle := Canvas.TextWidth(Columns[I].Title.Caption);
if WidthField < WidthTitle then
if Columns[I].Title.SortMarker = smNoneEh then WidthField := WidthTitle
else WidthField := WidthTitle + 16
else
if (Columns[I].ButtonStyle = cbsEllipsis) or
(Columns[I].ButtonStyle = cbsDropDown) or
(Columns[I].ButtonStyle = cbsAuto) then
WidthField := WidthField + 16;
if WidthField > WidthMax then
WidthMax := WidthField;
Next;
end;
end;
Columns[I].Width := WidthMax + 10;
First;
EnableControls;
end;
end;
end;
← →
Zergling (2003-07-29 13:11) [1]Table -> OnAfterPost
← →
Lt (2003-07-30 08:39) [2]onAfterPost - событие хорошее, но если я не ухожу с редактируемой ячейки, т.е. изменил значение в ячейке и в ней же остался, onAfterPost не отрабатывает, а мне нужно, чтоб как только изменения произошли, ширина сразу изменилась бы. Наверное, стоит использовать onValidate или onChange для Field? Что скажете?
← →
Zergling (2003-07-30 09:29) [3]Ну по аналогии есть еще
Table -> OnAfterEdit
← →
Lt (2003-07-30 09:56) [4]Не-е, onAfterEdit не работает, я уже пробовал.
← →
Zergling (2003-07-30 10:40) [5]Для стандартного DBGrid -> OnConsumerDrawColumnCell
procedure TFormWarehouse.DBGridConsumerDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.Field.Value <> Null then
if Canvas.TextWidth(Column.Field.Value) > Column.Width then Column.Width := Canvas.TextWidth(Column.Field.Value) + 5;
end;
← →
Sergey13 (2003-07-30 11:10) [6]2Lt (29.07.03 13:08)
А чем тебе не нравится показ текста в несколько строк и/или показ неуместившихся строк хинтом. В TDBGridEh ИМХО более чем достаточно таких штучек. Ты прикинь 1000 строк имеют среднюю длину 20 символов и 1 строка 200. Красивый грид ты получишь? Если к тому же эта запись с длинным значением вне заны видимости.
ИМХО велосипед изобретаешь. Причем конструкция велосипеда мягко говоря не того... не катит.
← →
NAlexey (2003-07-30 11:22) [7]Лучше всего наверное это повесить на события InplaceEdit, скорее всего в Eh гриде он вынесен в published. InplaceEdit - обычный эдит, и обрабатывай его события, хоть после вставки каждого символа. Другой вопрос: умеет ли Eh равномерно изменять ширину остальных колонок при изменении текущей?
← →
BizonWar (2003-07-30 11:22) [8]У DataSource есть событие OnDataChange. IMHO то, что тебе нужно. Туда еще и поле передается в качестве аргумента, т.е. сразу можно определить, какой столбец проверять.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c