Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Вниз

последовательность визуализации окна   Найти похожие ветки 

 
GuestPascal   (2005-07-24 06:12) [0]

Здравствуйте !
В приложении на трёх панелях печатаются табличные данные с помощью копмонент TDBGridEh. Точнее, данные, возвращаемые с помощью запросов TADOStoredProc. При этом на клиенте явно видна последовательность прорисовки всех окон: scrollings, размеры и т.п. Как сделать так, чтобы печать происходила только после полной готовности данных к печати ? Пробовал различные способы: dbgrid.visual = false и т.п., - ничего не помогает. Нужно управлять механизмом визуализации и включать его, когда захочу. При разработке используется разрешение 800x600, а на клиенте 640x480. Если визуализировать один компонент dbgrid, то, конечно, всё происходит быстро - так, как нужно. Но требуется три набора данных.


 
Leonid Troyanovsky ©   (2005-07-24 06:19) [1]


> GuestPascal   (24.07.05 06:12)  


PanelX.Visible ?

--
Regards, LVT.


 
guestPascal   (2005-07-24 06:43) [2]

Leonid Troyanovsky !
Первоначально все панели, на которых расположены dbgrid (TDBgridEh) имеют значение panel.visible = true. Но sp (TADOStoredProc), ответственные за данные имеют свойство sp.Active = false, т.е. на экране данных нет, только пустые панели. Данные на трёх панелях визуализируются после нажатия кнопочки btn (TToolButtn).


 
Leonid Troyanovsky ©   (2005-07-24 06:58) [3]


> Первоначально все панели, на которых расположены dbgrid
> (TDBgridEh) имеют значение panel.visible = true. Но sp (TADOStoredProc),
> ответственные за данные имеют свойство sp.Active = false,
> т.е. на экране данных нет, только пустые панели. Данные
> на трёх панелях визуализируются после нажатия кнопочки btn
> (TToolButtn).


Первоначально невидимые панели, по выполнению ХП,
сделать видимыми.

Или, как его, DisableControls (DataSource, кажись).

--
Regards, LVT.

PS. Кстати, скорость прорисовки зависит и от вычисляемых полей.


 
guestPascal   (2005-07-24 07:32) [4]

Leonid Troyanovsky !
Вычисляемых полей нет, используются только col.KeyList & col.PickList. DisableControls не используется, просто после назначения параметров устанавливается sp.Active = true. Кажется, здесь DisableControls не нужен.
Если я правильно понял, то нужно (скажем, в конструкторе главного окна) выполнить хранимые процедуры с параметрами, возвращающими заведомо пустой набор данных. Это возможно, т.к. в набор параметров входят две даты. У меня большая уверенность, что Вы правы. Сейчас проверю.


 
guestPascal   (2005-07-24 07:52) [5]

Попробовал.
Когда менял код, догадался, что не прокатит.
Вот почему: приложение содержит pageControl (TPageControl) с набором tabSheet (TTabSheet). Для визуализации этих трёх наборов данных нужно, чтобы была активна именно эта закладка (tabSheet). Приложение же запоминает последнюю активную закладку в .ini файле и активизирует её при следующем запуске приложения. Пользователь в работе может вообще не работать с этими данными. Так что, нужно вначале активизировать эту закладку, выполнить процедуры с "инвалидными" параметрами, и активизировать закладку из .ini файла. Как то слишком заморочено получается. Иначе Run Time говорит "Невозможно установить фокус ввода на невидимом окне", что я и получил.


 
Leonid Troyanovsky ©   (2005-07-24 08:03) [6]


> guestPascal   (24.07.05 07:52) [5]

> закладку, выполнить процедуры с "инвалидными" параметрами,
> и активизировать закладку из .ini файла. Как то слишком
> заморочено получается. Иначе Run Time говорит "Невозможно



А нужен ли, вообще, запрос, возвращающий пустой набор?
Можно просто ручками (в дизайнтайме) установить
нужные колонки (и размеры) грида.

--
Regards, LVT.


 
guestPascal   (2005-07-24 08:30) [7]

Leonid Troyanovsky ! Просто я реализовал Ваше предложение
"Первоначально невидимые панели, по выполнению ХП,
сделать видимыми." Это возможно с помощью пустого набора. При этом размеры устанавливаются быстрее, но тоже заметно. А с размерами колонок тоже беда - они хранятся в БД. Все табличные данные используют один unit с dbgrid"ом, для него устанавливаются идентификационные параметры и он отображает наборы данных, возвращаемые разными sp. Вот как бы скрыть визуализацию на какое то время. Понятно, что замедление - это плата за универсальность, но должно быть решение.


 
Leonid Troyanovsky ©   (2005-07-24 09:25) [8]


> guestPascal   (24.07.05 08:30) [7]

> А с размерами колонок тоже беда - они хранятся в БД. Все
> табличные данные используют один unit с dbgrid"ом, для него
> устанавливаются идентификационные параметры и он отображает
> наборы данных, возвращаемые разными sp. Вот как бы скрыть
> визуализацию на какое то время. Понятно, что замедление
> - это плата за универсальность, но должно быть решение.


Т.е., некий грид используется как шаблон для всех далее показываемых?
Или .. может картинку нарисуешь.

--
Regards, LVT.


 
guestPascal   (2005-07-24 09:42) [9]

Leonid Troyanovsky !
Да это всё не особенно интересно, просто этих таблиц - до чёрта и пришлось писать некий общий unit для отображения наборов данных, возвращаемых sp (TADOStoredProc).
Вот кусок этого unit DBGridFormatFrm, выполняющий печать данных:

procedure TDBGridFormat.showData(Aparameters: TStringList);
var
 i, iCount, numColumn: Integer;
 cursave: TCursor;
begin
 initgridformat;
 cursave       := Screen.Cursor;
 Screen.Cursor := crHourGlass;
 baseProcedureName := gridformat.baseProcedureName;
 iCount := Aparameters.Count - 1;
 numColumn := 0;
 if DBGrid.Showing then
   numColumn := DBGrid.SelectedIndex;
 spMain.DisableControls;
 spMain.Active := false;
 try
   spMain.ProcedureName := baseProcedureName + suffProcedureName[0];
   spMain.Parameters.Refresh;
   for i := 0 to iCount do
     spMain.Parameters[i + 1].Value := Aparameters.Strings[i];
   spMain.Active := true;
 except
   on E: Exception do begin
     spMain.Active := false;
     MessageDlg(E.Message, mtError, [mbOK], 0);
   end;
 end;
 Screen.Cursor := cursave;
 if not spMain.Active then exit;
...

А вот кусок форматирования dbgrid:

function TGridFormat.createColumnsDBgridEh(aidGrid, aidFormat: Integer;
 agrid: TDBGridEh): Boolean;
var
 col: TColumnEh;
 fieldname, nameProcPickList: string;
 colCount: Integer;
 useColumnsFooter: Boolean;
begin
 Result := spActive(aidGrid, aidFormat, "getGridFormatColumns");
 if not Result then exit;
 if paramsgrid = nil then
   countParamsGrid := -1
 else
   countParamsGrid := paramsgrid.Count - 1;
 agrid.FrozenCols := 0;
 agrid.Columns.Clear;
 nameFields.Clear;
 SetLength(columnsFooter, 0);  colCount := 0;
 useColumnsFooter := false;
 sp.First;
 while not sp.Eof do begin
   fieldname := trim(sp.FieldByName("nameField").AsString);
   if agrid.DataSource.DataSet.FindField(fieldname) = nil then begin
     sp.Next;  continue;
   end;
   nameFields.Add(fieldname);
   colCount := colCount + 1;
   SetLength(columnsFooter, colCount);
   col := agrid.Columns.Add;
   col.FieldName := fieldname;
   col.Title.Caption := trim(sp.FieldByName("nameColumn").AsString);
   col.Width := sp.FieldByName("widthColumn").AsInteger;
   col.ReadOnly := sp.FieldByName("readOnly").AsVariant;
   nameProcPickList  := trim(sp.FieldByName("spPickList").AsString);
   if Length(nameProcPickList) > 0 then
     makePickList(col, nameProcPickList,
     sp.FieldByName("useParamsShow").AsVariant);
   case sp.FieldByName("align").AsInteger of
   0: col.Alignment := taLeftJustify;
   1: col.Alignment := taCenter;
   2: col.Alignment := taRightJustify;
   end;
   col.Tag := sp.FieldByName("useInTitle").AsVariant;
   columnsFooter[colCount - 1] := sp.FieldByName("sumFooter").AsInteger;
   if not useColumnsFooter then
     useColumnsFooter := (columnsFooter[colCount - 1] > 0);
   sp.Next;
 end;
 sp.Active := false;

в БД хранятся align колонок, их наименования, возможность редактирования и т.п.

Но суть не в этом: как скрыть подготовку к визуализации dbgrid ?

В общем, спасибо, пойду книжку какую нибудь почитаю про визуализацию. До завтра.


 
Leonid Troyanovsky ©   (2005-07-24 10:28) [10]


> guestPascal   (24.07.05 09:42) [9]
..
> Но суть не в этом: как скрыть подготовку к визуализации
> dbgrid ?


Все несколько, кхм.., туманно.
Если "подготовка к визуализация" это createColumnsDBgridEh, то,
видимо, следует ее проводить до (первого) показа грида.
Если это initgridformat, то передвинуть DisableControls до
него. Хотя, непонятно, почему оное должно происходить
при каждом показе.

Кстати, нужен внешний try-finally для защиты курсора, EnableControls etc.

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.022 c
4-1118757036
Dr. Genius
2005-06-14 17:50
2005.08.14
Определение доступа к ресурсам компьютера


14-1121835426
vajo
2005-07-20 08:57
2005.08.14
Помогите выбрать ноутбук


3-1120541716
Ландграф Павел
2005-07-05 09:35
2005.08.14
Access через ADO


1-1122026083
Ravend
2005-07-22 13:54
2005.08.14
Порекомендуйте контрол


1-1122276979
slotti
2005-07-25 11:36
2005.08.14
Как из OpenDialog (SaveDialog) получить имя(путь) к папке ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский