Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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]

> Имхо, эта форма настроек — окно другого процесса.

Тоже так подумал. В любом случае там как-то хтро сделано&#133


 
Игорь Шевченко ©   (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
3-1196280048
Бэтман
2007-11-28 23:00
2008.04.27
Проблема с компонентом QuikReport


2-1206550287
SysError
2008-03-26 19:51
2008.04.27
как программно изменить цвет кисти в mspaint.exe


2-1206483388
Андрей Молчанов
2008-03-26 01:16
2008.04.27
Модальная форма параллельно с обычной


3-1196335571
abhtr
2007-11-29 14:26
2008.04.27
Помогите составить запрос


11-1188050116
Andrey_rus
2007-08-25 17:55
2008.04.27
TKOLRichEdit & RE_InsertRTF





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский