Форум: "Начинающим";
Текущий архив: 2008.04.27;
Скачать: [xml.tar.bz2];
ВнизМодальная форма параллельно с обычной Найти похожие ветки
← →
Андрей Молчанов (2008-03-26 01:16) [0]Приветствую.
Ситуация следующая.
Есть три формы - frmMain, frmParr, frmModal.
Вначале главная открывает frmParr через Show. Затем она же открывает frmModal через ShowModal. Однако при этом frmParr также блокируется. Как избежать этого?
← →
Германн © (2008-03-26 01:24) [1]
> Модальная форма параллельно с обычной
>
> Андрей Молчанов (26.03.08 01:16)
>
> Приветствую.
>
> Ситуация следующая.
>
> Есть три формы - frmMain, frmParr, frmModal.
>
> Вначале главная открывает frmParr через Show. Затем она
> же открывает frmModal через ShowModal. Однако при этом frmParr
> также блокируется. Как избежать этого?
>
Не делать frmModal модальной. Какой смысл в модальности, если не нужно запрещать доступ ко всем прочим формам приложения?
← →
Андрей Молчанов (2008-03-26 01:32) [2]1. Нужно запрещать доступ ко все, кроме одной.
2. Нужно приостанавливать выполнение.
← →
Германн © (2008-03-26 01:47) [3]
> Андрей Молчанов (26.03.08 01:32) [2]
>
> 1. Нужно запрещать доступ ко все, кроме одной.
> 2. Нужно приостанавливать выполнение.
>
1.Так может стоит именно эту одну сделать модальной?
2. Выполнение чего "нужно приостанавливать"?
Может стоит в вопросе озвучить саму задачу?
← →
Андрей Молчанов (2008-03-26 02:03) [4]Смысл в том, что frmParr - форма, показавающая прогресс выполнения действий потока. А остальное приложение должно продолжать работать при этом в обычном режиме. Например, запрещая доступ к frmMain при вызове frmModal.
← →
Германн © (2008-03-26 02:21) [5]
> ндрей Молчанов (26.03.08 02:03) [4]
>
> Смысл в том, что frmParr - форма, показавающая прогресс
> выполнения действий потока.
А тут ещё и допоток?
← →
Андрей Молчанов (2008-03-26 02:39) [6]Поток ни на что не влияет.
← →
Германн © (2008-03-26 02:57) [7]Какой простор для телепатов!
← →
Германн © (2008-03-26 03:01) [8]Да. Ещё и ник автора сабжа очень подходит!
← →
{RASkov} © (2008-03-26 09:30) [9]> [0] Андрей Молчанов (26.03.08 01:16)
Модальная форма - она для того и модальная, что бы только с одной с ней работать....
Если желаешь другого, то не показывай модально форму....
← →
Семеныч (2008-03-26 13:00) [10]> Андрей Молчанов (26.03.08 01:16)
Желаемого можно добиться, если сделать frmParr не формой VCL, а чистым окном Windows и запускать ее в отдельном потоке.
← →
Kolan © (2008-03-26 14:54) [11]> Смысл в том,
Так а третья зачем?
← →
Amoeba © (2008-03-26 15:32) [12]Может такое нужно?
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1169
← →
Андрей Молчанов (2008-03-26 18:20) [13]>> Германн
Несмотря на возраст, пожалуйста, соблюдайте уважение. Поток действительно ни на что не влияет и выполняется отдельно.
Итак, пример того, что я хочу получить - в Антивирусе Касперского можно открыть форму настроек (для меня она была бы frmMain), а в ней какую-нибудь дополнительную форму (frmModal). При этом главное окно антивируса (frmParr) не будет заблокировано модальной формой.
(http://www.doublesafety.com/personal/sample.jpg)
← →
Германн © (2008-03-26 19:05) [14]
> Антивирусе Касперского можно открыть форму настроек
Имхо, эта форма настроек - окно другого процесса.
← →
Андрей Молчанов (2008-03-26 19:32) [15]В любом случае это не отдельный процесс - по крайней мере, так говорит Process Explorer.
← →
Германн © (2008-03-26 20:08) [16]
> Андрей Молчанов (26.03.08 19:32) [15]
>
> В любом случае это не отдельный процесс - по крайней мере,
> так говорит Process Explorer.
>
Ну тебе виднее. У меня Касперского нет.
← →
Kolan © (2008-03-27 10:31) [17]> Имхо, эта форма настроек — окно другого процесса.
Тоже так подумал. В любом случае там как-то хтро сделано…
← →
Игорь Шевченко © (2008-03-27 10:46) [18]
> Смысл в том, что frmParr - форма, показавающая прогресс
> выполнения действий потока. А остальное приложение должно
> продолжать работать при этом в обычном режиме. Например,
> запрещая доступ к frmMain при вызове frmModal.
Я правильно понимаю, что прогресс отображается себе отдельной формой, действие, чей прогресс надо отображать, происходят в главной форме (допустим), при этом контролы главной формы недоступны для тыкания,
а потом, когда действие завершается, на форме прогресса появляется кнопка "закрыть", и до тех пор, пока ее не нажмешь, дальше никуда ?
← →
Игорь Шевченко © (2008-03-27 11:02) [19]Стояла аналогичная [18] задача, решена была примерно так:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btnStart: TButton;
procedure btnStartClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
uses
ProgressForm;
{$R *.dfm}
procedure TForm1.btnStartClick(Sender: TObject);
var
I: Integer;
AProgressBar: TForm2;
begin
AProgressBar := TForm2.Create(Application);
AProgressBar.StartProgress(1000);
try
AProgressBar.Show;
for I := 1 to 1000 do
begin
AProgressBar.StepProgress(I);
Sleep(100);
end;
finally
AProgressBar.EndProgress;
end;
end;
end.unit ProgressForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FWindowList: Pointer;
public
procedure StartProgress (MaxValue: Integer);
procedure StepProgress (Value: Integer);
procedure EndProgress;
end;
implementation
{$R *.dfm}
{ TForm2 }
procedure TForm2.Button1Click(Sender: TObject);
begin
EnableTaskWindows(FWindowList);
Close;
end;
procedure TForm2.EndProgress;
begin
Button1.Enabled := true;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm2.StartProgress(MaxValue: Integer);
begin
ProgressBar1.Max := maxValue;
ProgressBar1.Min := 0;
ProgressBar1.Position := 0;
FWindowList := DisableTaskWindows(Handle);
Button1.Enabled := false;
end;
procedure TForm2.StepProgress (Value: Integer);
begin
ProgressBar1.Position := Value;
Application.ProcessMessages;
end;
end.
Надеюсь, поможет
← →
Андрей Молчанов (2008-03-29 17:53) [20]Сейчас сделал так - в форме, которую не надо отключать написал:
procedure WMEnable(var Msg: TWMEnable); message WM_ENABLE;
..
procedure TfrmBackup.WMEnable(var Msg: TWMEnable);
begin
inherited;
EnableWindow(Handle, True);
end;
Вроде бы работает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.04.27;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.002 c