Загружать разные данные в одном TVirtualStringTree

В моем приложении я на главной форме tc_main как TTabControl с 4 вкладками и vt_main как TVirtualStringTree остается на этом. Зависит от выбранной вкладки vt_main может иметь разные заголовок и данные внутри. Для каждой вкладки я определяю свой обработчик данных.

Tvt_main = record
  column: array of String;
end;

Pvt_tab_equip = ^Tvt_main;
Pvt_tab_insp = ^Tvt_main;
Pvt_tab_certif = ^Tvt_main;
Pvt_tab_doc = ^Tvt_main;

const
  sz_vt_main = SizeOf(Tvt_main);

Теперь вопрос в том, как я могу переключаться между вкладками и обновлять vt_main просматривать, поддерживая данные из обработчиков, без перезагрузки данных из sql.

В этот момент, когда я пытаюсь обновить конфигурацию заголовка, я получаю нарушение прав доступа.

Я поставлю код. Я надеюсь, вы поняли суть.

procedure Tform_main.tc_mainChange(Sender: TObject);
begin
  //draw/redraw `vt_main header` each time TabIndex is changed.
  draw_vt_main_header;

  //if content not loaded, then load data from sql.
  if not vt_loaded[tc_main.TabIndex] then draw_vt_main;

  //search for some text
  search;
end;

и вот процедура рисования / перерисовки заголовка VT

procedure Tform_main.draw_vt_main_header;
var
  tab_index, i: Word;
begin
  tab_index:= tc_main.TabIndex;

  vt_main.Header.SortColumn:= -1;
  vt_main.Header.Columns.Clear;

  if Length(vt_header[tab_index].column) > 0 then
    for i := 0 to High(vt_header[tab_index].column) do
      if vt_header[tab_index].column[i].position >= 0 then
        with vt_main.Header.Columns.Add do
          begin
            Text:= vt_header[tab_index].column[i].caption;
            Width:= vt_header[tab_index].column[i].width;
            Position:= vt_header[tab_index].column[i].position;

            if vt_header[tab_index].column[i].visible then
              Options:= Options + [coVisible]
            else
              Options:= Options - [coVisible];

            CaptionAlignment:= taCenter;
            Alignment:= vt_header[tab_index].column[i].alignement;
          end;
end;

0 ответов

Другие вопросы по тегам