MessageDlg ?

7 отговора 278 прегледа
#1

MessageDlg ?

Как да направя след извикване на MessageDlg програмата да продължи изпълнението си, без да изчаква натискането на бутон от MessageDlg-а ??

Предварително благодаря

Отговор
в отговор на goro #2

Според мен

... нямаш нужда от MessageDlg, а например от някакво мемо за визуализация на грешките / съобщенията

Отговор
в отговор на goro #3

Re: MessageDlg ?

Запознай се с threads.

чети и дишай по-леко
Отговор
в отговор на goro #4

Re: MessageDlg ?

Няма такъв вариант. MessageDlg() е модален диалог, който прекъсва изпълнението на тек. програма, докато не натиснеш някой от бутоните.
Но все пак има два варианта за да направиш това което искаш:
- нишка за процеса, който трябва да работи
- да покажеш немодална форма, поразително приличаща на стандартния MessageDlg(), която стои и чака събитие, докато програмата работи. Напр. като Search & Replace диалога в Ворда.

Отговор
в отговор на Beco #5

Re: CreateMessageDialog function

Относно "немодална форма, поразително приличаща на стандартния MessageDlg()", виж функцията CreateMessageDialog в хелпа:

function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons): TForm;

Description:

Call CreateMessageDialog to create a message dialog that will be used several times in an application. CreateMessageDialog returns a dialog of the type specified by the DlgType parameter and with the buttons indicated by the Buttons parameter.

Note:

CreateMessageDialog does not display the dialog form. The application must display this form when it is needed.

Успех!

Отговор
в отговор на Mixy #6

Re: CreateMessageDialog function

Благодаря Mixy.

Отговор
в отговор на Pechenia #7

Ето един пример

procedure Suobshtenie;
begin
MessageDlg('Exo', mtInformation, [mbOK], 0);
end;
..................
CreateThread(nil, 0, @Suobshtenie, nil, 0, id1);

баче дали след като се натисне ОК на съобщението нишката ще се унищожи ?

Отговор
в отговор на goro #8

Re: Ето един пример

Щом ти се налага да правиш такива работи, значи имаш проблем с дизайна на приложението. А иначе за унищожаването:

MSDN:
The thread object remains in the system until the thread has terminated and all handles to it have been closed through a call to CloseHandle.

За да се освободят ресурсите, трябва да си вземеш handle-а на конеца и да викнеш CloseHandle за него.

Отговор