Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизМодальное окно без ShowModal? Как? Найти похожие ветки
← →
афвуд (2004-08-04 12:20) [0]В общем проблема выглядит так:
Мне надо Показать окно с прогрессбаром. И чтобы оно имело все свойства модального, НО вызывая его с ShowModal из процедуры моей управление как бы "передаётся" этому окну которое я ShowModal( :) ). Мне этого не надо. Мне надо сделать процесс, чтобы время от времени показывалось изменение прогрессбара, и чтобы окошко с прогрессбаром было модальным, а потом это окошко просто закрыть.
Я думаю средствами ВинАпи это возможно, но к сожалению с ним не дружен я пока.
← →
begin...end © (2004-08-04 12:24) [1]SetWindowPos ?
← →
KSergey © (2004-08-04 12:28) [2]Магическое "ВинАпи" тут совершенно ни при чем.
Модальное окно - оно по определению модально. И апишная ф-ция его отображения так же ждет его закрытия.
Выхода 2:
а) организовать действия в обдельном кодовом потоке (в общем-то самое грамотное)
б) или сделать так: (я уже приводил здесь этот код)procedure TProgressForm.InitializeProgress(...);
begin
// проверка - индикатор уже инициализирован?
if Visible then Exit; // уже и так индикатор активен - выход
// настраиваем параметры отображения
...
//--- дальнейший код взят из TCustomForm.ShowModal и несколько урезан
CancelDrag;
if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
ReleaseCapture;
Include(FFormState, fsModal);
FActiveWindow := GetActiveWindow;
FSaveCursor := Screen.Cursor;
Screen.Cursor := crDefault;
FWindowList := DisableTaskWindows(0);
Show;
SendMessage(Handle, CM_ACTIVATE, 0, 0);
//-- конец кода из TCustomFirm.ShowModal
Application.ProcessMessages;
end;
procedure TProgressForm.EndProgress(...);
begin
...
//--- дальнейший код взят из TCustomForm.ShowModal и несколько урезан
if GetActiveWindow <> Handle then FActiveWindow := (0);
Hide;
Screen.Cursor := FSaveCursor;
EnableTaskWindows(FWindowList);
if FActiveWindow <> 0 then SetActiveWindow(FActiveWindow);
Exclude(FFormState, fsModal);
//--- конец кода, взятого из TCustomForm.ShowModal
end;
Соответственно и пльзуемся таким индикатором просто:ProgressForm.InitializeProgress(...);
// какие-то действия
ProgressForm.EndProgress(...);
← →
begin...end © (2004-08-04 12:32) [3]
> [2] KSergey © (04.08.04 12:28)
Мне почему-то кажется, что ему просто нужно окно StayOnTop :-)
← →
KSergey © (2004-08-04 12:38) [4]> [3] begin...end © (04.08.04 12:32)
> Мне почему-то кажется, что ему просто нужно окно StayOnTop
Нет, StayOnTop совсем не то. Пробовали.
Оно дает возможность ткнуть мышью в окно под ним (выступающую часть) - и оно будет по прежнему работать (ну, если еще и App.ProcessMess поналяпаны, а без них тут никак в некотром смысле).
Да и ненавижу я эти StayOnTop окна: они дже выше дельфи висят при отладке, раздражает и мешает.
Вообще основная фишка вт этого кода, как мне показалось при изучении TCustomForm.ShowModal - это DisableTaskWindows/EnableTaskWindows. По сути (как мне кажется) в них борландовцы повторили часть кода из виндов (ведь они сами не пользуют стандартный виндовский механизм модальных окон!)
← →
Леприкон © (2004-08-04 12:47) [5]Можно при показе окна с прогрессом установить у остальных форм свойство Enabled в false, а при закрытии - соотв. в true. Если, конечно, я правильно понял ситуёвину. :-)
← →
KSergey © (2004-08-04 12:55) [6]> [5] Леприкон © (04.08.04 12:47)
> Можно при показе окна с прогрессом установить у остальных
> форм свойство Enabled в false
Уже сделано
См. DisableTaskWindows/EnableTaskWindows ;)
← →
афвуд (2004-08-04 12:55) [7]KSergey Твой код помог. Там действительно вся фишка в DisableTaskWindows/EnableTaskWindows.
> Можно при показе окна с прогрессом установить у остальных
> форм свойство Enabled в false, а при закрытии - соотв. в
> true. Если, конечно, я правильно понял ситуёвину. :-)
Очень. Очень некрасивое решение. А если форточек может быть 50, 100 :))) Я ж не знаю какая из них в данный момент у меня открыта :). А перебирать... Ну просто по-программистки некрасиво с моей точки зрения.
← →
афвуд (2004-08-04 12:57) [8]Да. Забыл. Спасибо большое, KSergey. :))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c