Форум: "Начинающим";
Текущий архив: 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