Форум: "Основная";
Текущий архив: 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.013 c