Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > DbGrid


Автор: Loki3D 13.3.2006, 11:46
Если кто то подобное уже реализовывал, то подскажите, как.
Данную задачу я решил вот таким способом.

Код

// в этой процедуре я читаю из ИНИ файла значения ширины
procedure TForm8.GridSizing ();
var
i:integer;
Begin
  config:=TIniFile.Create ('../files/config.ini');
  Form8.DBGrid1.Columns [0].Visible := false;
  For i:=1 to Form8.DBGrid1.FieldCount - 1 do
  begin
    // проверка наличия переменной  Col
    If Config.ValueExists ('F8','Col'+ IntToStr(i)) then
    begin
    Form8.DBGrid1.Columns [i].Width := StrToInt (Config.ReadString ('F8','Col'+ IntToStr(i),''));
    end;
  end;
end;

// а здесь я сохраняю значения при изменении ширины столбцов руками(мышкой).

procedure TForm8.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
i: integer;
begin
  For i:=1 to Form8.DBGrid1.Columns.Count-1 do
  begin
    Config.WriteString ('F8','Col' + intToStr(i),IntToStr(Form8.DBGrid1.Columns[i].Width));
  end;
end;


собственон в этом то вся и проблема.
процедура записи новых значений Ширины стоит на событие рисования Ячейки, и вспринципе то все нормально.
Но стоит вызвать что то типа
Table.Active:= False; а потом
Table.Active:= true;
то Сетка рисуется заново и сохраняются значения ширины.. соответсвующие Длинне поля в Таблице БД.

Вощем я Уперся В Алгоритм.
А вопросы у меня такие.
Как можно сделать вызов процедуры на изменение ширины столбца а не на прорисовку ячейки, такого события у DbGrid нету, может посоветуете др. компонент?
Или такое событие можно Самому написать отредактировав Стандартный Компонент (В этом отношении я вообще знаниями не обладаю), поэтому хотел бы знать, стоит ли в это погружаться?

Автор: _hunter 13.3.2006, 12:15
не совсем понятна проблема.
устанавливай ширины один раз, после активации таблицы.
зачем для этого событие искать?

Автор: Loki3D 13.3.2006, 18:36
у меня в Grid Может открываться Таблица с разным количеством Столбцов.
Я вот хочу чтобы пользователь, если и работает с одной таблицей, то имел возможность настроить ширину, Так чтоб она запомнилась и при последующей загрузке, повторно настраивать не приходилось.

Так же у меня есть в программе событя которые временно закрывают набор данных.. а потом открывают его снова.
вот именно при этом и получается, что в ИНИ записывается Ширина, соответсвующая длинне поля в БД тк Сетка начинает рисоваться заново. а на это событие у меня повешана Запись параметров Сетки в ИНИ.

я то собственно хочу узнать.. есть ли компонент Сетки, в котором есть событие на изменение ширины столбца?
или Если это не сложно, то как самому изменить Компонент TDbGrid чтобы в нем было такое событие?

Автор: _hunter 13.3.2006, 19:04
всеравно нихт не понял.
ну несколько таблиц есть и что? всеравно где-то они активируются/деактивируются. в этих местах и сохраняй значения.

Автор: Foley 14.3.2006, 00:14
сделай чтоб в ини записывалось имя таблицы и соответственно настройки грида для этой таблицы. а сохраняй
Цитата(_hunter @ 13.3.2006, 19:04 Найти цитируемый пост)
где

Цитата(_hunter @ 13.3.2006, 19:04 Найти цитируемый пост)
они активируются/деактивируются


Автор: Loki3D 19.3.2006, 00:37
короче решил проблему тупо и не интересно..
везде где возможно поставил Процедуру сохранения параметров Сетки..
и после каждого события по обновлению.. вставил процедуру считывания параметров.

от идеи сохранения значений столбцов во время рисования Ячеек или рисования Данных, пришлось отказаться

всем большое спасибо за желание помоч

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)