Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Вниз

За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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
2-1211955635
Magos
2008-05-28 10:20
2008.06.22
Как убрать выделение последней выбранной ячейки StringGrid?


2-1211704334
BlueDragon
2008-05-25 12:32
2008.06.22
USB контроллер


2-1211748921
sof
2008-05-26 00:55
2008.06.22
динамически-созданные компонеты


4-1192181466
Dmitry S
2007-10-12 13:31
2008.06.22
Убрать кнопку с панели задач.


1-1194937505
DancerMan
2007-11-13 10:05
2008.06.22
Обмен значениями элементов ListView





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