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

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

Как отследить изменение размеров столбцов в 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;


все. но лучше так не делать... ;) лучше поменять причину, ту отчего этого захотелось.


Наверх

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