![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отследить изменение размеров столбцов в TDBGrid [D7]
menart © (2006-06-01 19:59:00)Cобственно сабж!
Заранее спасибо за помощь
menart (2006-06-03 20:50:00) [1]В принципе сейчас так и делаю, просто думал что так будет правильнее.
Еще раз спасибо за совет
sniknik (2006-06-03 17:40:00) [2]зачем вообще в таком случае отслеживать изменения в процессе? у тебя же есть место где начало/конец "обращения"? не знаю что ты под этим подразумеваеш, но допустим открытие закрытие формы на которой лежит грид, вот там и запоминай/восстанавливай размер всех, неважно менялся он или нет, будет гораздо менее напряжно для системы чем отслеживать каждое изменение каждой колонки юзером.
или сделать сохранение настроек кнопкой, захотел сохранить изменения - нажал, нет останется как было.
menart (2006-06-03 16:58:00) [3]СПАСИБО БОЛЬШОЕ!
> все. но лучше так не делать... ;) лучше поменять причину,
> ту отчего этого захотелось.
А как лучше сделать, чтобы запомнить на сколько изменился размер колонки, что бы потом установить такой же при обращении к этой же таблице?
MsGuns (2006-06-02 13:17:00) [4]>все. но лучше так не делать... ;) лучше поменять причину, ту отчего этого захотелось.
Слова не мальчика, но мужа
;)
sniknik (2006-06-01 22:24:00) [5]можно так. поскольку события такого нет, то его придется сделать...
для начала скопируй к себе в папку файл DBGrids.Pas, не забудь рядом лежащий DBGrids.res, после подключи его к проекту (кнопка + на палитре). теперь можно его менять ...
ищеш описание TColumn, добавляеш пару строк (выделено жирным)
TColumn = class(TCollectionItem)
private
FField: TField;
...
FStored: Boolean;
FOnColumnResize: TNotifyEvent;
procedure FontChanged(Sender: TObject);
...
property Showing: Boolean read GetShowing;
property OnColumnResize: TNotifyEvent read FOnColumnResize write FOnColumnResize;
published
...
end;
в процедуре SetWidth одну
procedure TColumn.SetWidth(Value: Integer);
var
Grid: TCustomDBGrid;
TM: TTextMetric;
DoSetWidth: Boolean;
begin
DoSetWidth := IsStored;
...
Changed(False);
if Assigned(FOnColumnResize) then FOnColumnResize(Self);
end;
end;
использовать
TForm1 = class(TForm)
DBGrid1: TDBGrid;
....
procedure FormCreate(Sender: TObject);
private
procedure ColumnResize(Sender: TObject);
public
end;
procedure TForm1.ColumnResize(Sender: TObject);
begin
with TColumn(Sender) do
Label1.Caption:= Title.Caption + ' : ' + IntToStr(Width);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.Columns[0].OnColumnResize:= ColumnResize; //какие нужны
...
//DBGrid1.Columns[n].OnColumnResize:= ColumnResize;
end;
все. но лучше так не делать... ;) лучше поменять причину, ту отчего этого захотелось.