Показать сообщение отдельно
  #7  
Старый 02.09.2013, 02:58
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Uniq!
Подкиньте ссылочку. Не могу найти эту "тему".
Ну как же, та самая, "факельная".

Цитата:
Сообщение от Uniq!
Думал сделать (дополнительную) форму, на OnShow которой, загрузить все таблицы. Но где вызвать её рождение ума не приложу.
На самом деле должно быть наоборот. Программа выполняет основные действия, которые, если нужно отображаются где-либо в интерфейсе. По-умному это зовется неинтерактивный процесс или неинтерактивное выполнение -- пользователь не может вмешаться в него. Ему в противоположность бывает интерактивный процесс или диалог, когда все пляшет вокруг интерфейса.

Нужно обычным порядком создать форму, разместить на ней необходимые компоненты, а потом предусмотреть публичный метод:
Код:
type
  TSplashForm = class(TForm)
    ProgressLabel: TLabel;
    ...
  public
    procedure ShowProgressFor(const LoadingItem: string);
  end;

var
  SplashForm: TSplashForm;

resourcestring
  sLoadingItem = 'Загрузка %s...';

procedure TSplashForm.ShowProgressFor(const LoadingItem: string);
begin
  if LoadingItem <> '' then
    ProgressLabel.Caption := Format(sLoadingItem, [LoadingItem]);
  else
    ProgressLabel.Catpion := '';
  ProgressLabel.Update;
end;
Соответственно, у DataSet-ов вызывать:
Код:
procedure DataSetBeforeOpen(DataSet: TDataSet);
begin
  if SplashForm <> nil then
    SplashForm.ShowProgressFor(DataSet.Name);
end;

procedure DataSetAfterOpen(DataSet: TDataSet);
begin
  if SplashForm <> nil then
    SplashForm.ShowProgressFor('');
end;

Получается ровно так, как писал в предыдущем сообщении. Возможно, вместо TLabel для ProgressLabel лучше использовать TStaticText, чтобы перерисовывалась только его область, а не вся форма. Такое поведение предполагаю, по коду VCL не смотрел.
Ответить с цитированием