Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.22;
Скачать: CL | DM;

Вниз

ЗаDisabl ить все формы кроме одной   Найти похожие ветки 

 
TUserClass   (2008-05-29 10:38) [0]

Доброе всем утро...Встала такая проблема...есть функция вызывающая окошко диалога (с кнопками типа "Да", "Нет", "Отмена"). В функции вызова есть кусок кода:

 If Form.ShowModal = mrOK then begin
   Value := cmResult;
 end;


Но дело в том, что при "показывании" данного окна Disabl"ится только та форма, из unita которого была вызвана сия функция. Встает вопрос: как бы задисаблить все формы проги при вызове этой функции, а по закрытию этого, не побоюсь этого слова, модального окна, все формы снова приобретали значение Enabled = true; ?

Вот принтскрин описанного выше http://img100.imageshack.us/img100/2536/delphims1.jpg


 
{RASkov} ©   (2008-05-29 10:53) [1]

Дык модально же она у тебя показывается, что тебе еще нужно-то?
В прочем есть список форм (Screen.Forms).... Можно бегать по нему(списку), и делать с каждой формой все, что захочешь...


 
clickmaker ©   (2008-05-29 10:54) [2]

> при "показывании" данного окна Disabl"ится только та форма,
> из unita которого была вызвана сия функция

неправда. При показе модального окна все остальные недоступны


 
TUserClass   (2008-05-29 11:00) [3]


> {RASkov} ©   (29.05.08 10:53) [1]


Показывается модально, но как я уже написал, почему то дисаблиЦа только форма, вызвавшая эту функцию...А ежели ф-ция вызвана, например, скрытой формой, то видимые в данный момент формы спокойно перекрывают это самое модальное окошко при, напрмер, клике на них

А Screen.Forms - это список всех форм моего приложения или как?


> clickmaker ©   (29.05.08 10:54) [2]


Вот он скрин, который наглядно опровергает все мои логические догадки:

http://img230.imageshack.us/img230/2038/delphi2ux9.jpg


 
TUserClass   (2008-05-29 11:02) [4]

Может окна не "блочаться" потому что эта ф-ция вызывается из отдельного Thread"а, может быть такое?


 
{RASkov} ©   (2008-05-29 11:04) [5]

> [3] TUserClass   (29.05.08 11:00)
> Вот он скрин, который наглядно опровергает все мои логические догадки:

Подозреваю, что.... во первых у тебя там СтэйОнТопы понавыставлены везде, во вторых, и главных, ошибка в 17 строке.... т.е. алгоритм работы программы в целом - хромает.

> А Screen.Forms - это список всех форм моего приложения или как?

Если не веришь участникам форума, нажми F1.....


 
TUserClass   (2008-05-29 11:08) [6]


> {RASkov} ©   (29.05.08 11:04) [5]


1. fsStayOnTop - ни у одной формы не стоит.
2. Да что это за "ошибка в 17 строке" ? - везде вижу это выражение и никак не допру что это такое :)
3. А скрин.формс - просто никогда раньше не использовал, поэтому решил уточнить :)


 
{RASkov} ©   (2008-05-29 11:20) [7]

> Может окна не "блочаться" потому что эта ф-ция вызывается
> из отдельного Thread"а, может быть такое?

Эх потоки.... потоки..
Скорее всего в этом и дело, да и не скорее, а в этом и дело ....наверное :)
Я с потоками в плотную не возился, т.е. знаю поверхностно, но не тонкости...
Найди в инете и почитай что-нибудь о модальности и потоках.... Потом расскажешь сам тут)

> Да что это за "ошибка в 17 строке" ?

Это абстрактное выражение.... т.е. № строки взят "от балды", дабы превратить в стабильное выражение...
Означает, что в коде содержится либо синтаксическая, либо логическая ошибка - но место ошибки сказать невозможно, из-за недостаточной информации...


 
TUserClass   (2008-05-29 11:28) [8]


> {RASkov} ©   (29.05.08 11:20) [7]


Мда...о модальности в потоках особо ничего не нашел ... но вроде проблема решилась путем использования в потоке процедуры Synchronize. Продолжаю тестировать :)


 
{RASkov} ©   (2008-05-29 11:44) [9]

> [8] TUserClass   (29.05.08 11:28)

Кстати, я сейчас "пробегся по инету", и натыкался на такой совет:
Модальную форму вызывай из основного потока, а не из доп, как ты сейчас делаешь....
Из доп. потока шли сообщение основной форме(PostMessage)... и там уже вызывай диалог...


 
TUserClass   (2008-05-29 11:48) [10]


> {RASkov} ©   (29.05.08 11:44) [9]


Ух ... вот чем не умею пользовацо, так это PostMessage"ом ... Вот как бы мне послать MainForm"у сообщение вызвать процедуру типа такой:

CuteMessage.Show ("Ошибка", " Вы получили следующие ошибки:" + #13 + ErrorMessage, [cmOK], Res, b_Exit, MainForm.msgim_Error.Picture.Bitmap);


 
{RASkov} ©   (2008-05-29 12:36) [11]

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

const MY_MES = WM_USER+1;

type
 TThr = class(TThread)
 public
   FHWND: THandle;
   procedure Execute; override;
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
   procedure My_Message(var Mes: TMessage); message MY_MES;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
{ TForm1 }
procedure TForm1.My_Message(var Mes: TMessage);
begin
 case Mes.WParam of
  0: ShowMessage("Передали "ноль"");
  1: Application.Minimize;
  2: ShowMessage("Hello from thread");
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 PostMessage(Handle, MY_MES, 0, 0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 PostMessage(Handle, MY_MES, 1, 0);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 with TThr.Create(True) do begin
  FHWND:=Self.Handle;
  FreeOnTerminate:=True;
  Resume;
 end;
end;
{ TThr }
procedure TThr.Execute;
begin
 inherited;
 PostMessage(FHWND, MY_MES, 2, 0);
end;

end.


 
TUserClass   (2008-05-29 12:49) [12]

{RASkov}, спасибо ... реально выручил ... поток продолжает выполняЦа после PostMessag"а, как и было задуманно. :)



Страницы: 1 вся ветка

Текущий архив: 2008.06.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
15-1210230201
koha
2008-05-08 11:03
2008.06.22
Можно ли найти работу программистом без вышки?


2-1212041779
Smile
2008-05-29 10:16
2008.06.22
TFooClass


2-1211867426
ab1e
2008-05-27 09:50
2008.06.22
зарегистрироваться как почтовая программа и получить адрес


2-1211785530
Sergey2
2008-05-26 11:05
2008.06.22
EConvertError при вызове StrToDAte


2-1212067160
TBase_Tree
2008-05-29 17:19
2008.06.22
SQL