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

Вниз

Как закрыть модальное окно?   Найти похожие ветки 

 
PZ   (2006-12-25 12:51) [0]

У меня модальная форма без заголовка:
BorderStyle = bsNone
KeyPreviw = True

Всю площадь формы закрывает компонент Bevel1, а его
полностью закрывает метка Label1
Пробую два варианта закрыть форму - не закрывается.
Как же её можно закрыть? Подскажите, пожалуйста.

procedure TForm1.FormDblClick(Sender: TObject);
begin
 Form1.Close;
end;

procedure TForm1.Label1DblClick(Sender: TObject);
begin
 Form1.Close;
end;


 
Anatoly Podgoretsky ©   (2006-12-25 13:06) [1]

> PZ  (25.12.2006 12:51:00)  [0]

А чей у тебя Form1 ?


 
novill ©   (2006-12-25 13:12) [2]

[0] PZ   (25.12.06 12:51)
второй вариант работает.


 
PZ   (2006-12-25 13:14) [3]

>  [1] Anatoly Podgoretsky ©   (25.12.06 13:06)

Form1 - это  та самая модальная форма, которую пытаюсь закрыть


 
Ega23 ©   (2006-12-25 13:16) [4]


> Form1 - это  та самая модальная форма, которую пытаюсь закрыть
>


МодалРезулт:=мрОК


 
PZ   (2006-12-25 13:21) [5]

> [2] novill ©   (25.12.06 13:12)

У меня почему-то не работает. Проверю еще раз.


 
Anatoly Podgoretsky ©   (2006-12-25 13:23) [6]

> PZ  (25.12.2006 13:14:03)  [3]

Чем докажешь?


 
PZ   (2006-12-25 13:34) [7]

Нет втрой вариант не работает

> [4] Ega23 ©   (25.12.06 13:16)

procedure TForm1.Label1DblClick(Sender: TObject);
begin
Form1.ModalResult := mpOk;  // Error Undeclared Identifier
Form1.Close;
end;


 
PZ   (2006-12-25 13:35) [8]

> [6] Anatoly Podgoretsky ©   (25.12.06 13:23)

У меня другой формы с тким именем нет


 
Германн ©   (2006-12-25 13:43) [9]


> Form1.ModalResult := mpOk;  // Error Undeclared Identifier

mrOK
И Close после этого не нужен


 
novill ©   (2006-12-25 13:43) [10]

> [7] PZ   (25.12.06 13:34)

а у меня все равно работает


 
Anatoly Podgoretsky ©   (2006-12-25 13:43) [11]

> PZ  (25.12.2006 13:35:08)  [8]

Не верю. При том я не про форму спрашивал, а про переменную.


 
novill ©   (2006-12-25 13:46) [12]

> Form1.ModalResult := mpOk;  // Error Undeclared Identifier

это наверное от того что правильно писать mrOk


 
Anatoly Podgoretsky ©   (2006-12-25 13:59) [13]


> а у меня все равно работает

У тебя наверно правильный Form1
Только нафиг он совсем нужен?


 
PZ   (2006-12-25 14:21) [14]

Исправил mpOk -> mrOK

> [11] Anatoly Podgoretsky ©   (25.12.06 13:43)
> [1] Anatoly Podgoretsky ©   (25.12.06 13:06)
> А чей у тебя Form1 ?

Не понял, о какой переменной идет речь?
А Form1 - действительно модальная форма, которую мне надо закрыть, но она не включена в проект, а создается динамически в главной форме,  по таймеру:

     If {некоторое условие} then
         Try
           Form1 := TForm1.Create(Owner);
           ......
           Form1.ShowModal;
         Finally
           FreeAndNil(Form1);
         End;


 
PZ   (2006-12-25 14:23) [15]

Может быть таймер не дает закрывать эту форму?


 
alex_*** ©   (2006-12-25 14:25) [16]

а нажатие на крестик в верх. правом углу не закрывает форму? (таймер не влияет на закрытие)


 
PZ   (2006-12-25 14:28) [17]

> [16] alex_*** ©   (25.12.06 14:25)

Вы не внимательно прочитали мой вопрос: форма без заголовка


 
alex_*** ©   (2006-12-25 14:30) [18]

тогда dblclick по лабелу решит проблему


 
PZ   (2006-12-25 14:37) [19]

> [18] alex_*** ©   (25.12.06 14:30)

Я тоже так думаю, но не решает ...


 
Anatoly Podgoretsky ©   (2006-12-25 14:38) [20]

> PZ  (25.12.2006 14:21:14)  [14]

О переменной с именем Form1
Нормальный код ты категорически отказываешься приводить, а гадать уже я не хочу.


 
alex_*** ©   (2006-12-25 14:52) [21]


> Я тоже так думаю, но не решает ...

ты туда попадаешь вообще?


 
PZ   (2006-12-25 14:55) [22]

> [20] Anatoly Podgoretsky ©   (25.12.06 14:38)

Я, честное слово, не понимаю. что от меня требуется. Весь код проекта - он довольно большой, приводить нет возможности. А все, что касается моего вопроса я, кажется, сообщил.


 
Anatoly Podgoretsky ©   (2006-12-25 14:56) [23]

Не понимаешь и ладно, а понимаешь ли ты то, что указано ранее, что переменная Form1 не нужна?


 
novill ©   (2006-12-25 14:57) [24]

> [22] PZ   (25.12.06 14:55)

создай новый проект с двумя формами - одна будет основная с кнопкой модального вызова второй, а вторая без границ с бевелом и лейблом, назначь соотв. методы. и пробуй!


 
PZ   (2006-12-25 15:00) [25]

> [21] alex_*** ©   (25.12.06 14:52)

Label растянут по всей форме allClient. Ну как не попасть?


 
alex_*** ©   (2006-12-25 15:07) [26]

ну так скажи, попадаешь или нет? до брейк поинта доходишь?


 
alex_*** ©   (2006-12-25 15:10) [27]

Да, кстати обрати внимание на [23] - убери указание Form1 для методов и никогда так не делай. (замени на self, если так хочется класс указать)


 
Anatoly Podgoretsky ©   (2006-12-25 15:18) [28]

> alex_***  (25.12.2006 15:10:27)  [27]

self тоже лишнее


 
PZ   (2006-12-25 15:32) [29]

> [23] Anatoly Podgoretsky ©   (25.12.06 14:56)
> [27] alex_*** ©   (25.12.06 15:10)

Form1 я убрал. Может это не прилично то, что я пишу Form1, но работе-то это не мешает.

> [26] alex_*** ©   (25.12.06 15:07)

ну так скажи, попадаешь или нет? до брейк поинта доходишь?

Нет, не дохожу.

Давайте приостановим обсуждение. Я уже получил от вас много рекомендаций. В спокойной обстановке поэксперименитую, возможно найду решение.
Спасибо всем, принявшим участие в этом трудном диалоге.
С уважением, PZ


 
evvcom ©   (2006-12-26 09:06) [30]

> [29] PZ   (25.12.06 15:32)
> Может это не прилично то, что я пишу Form1, но работе-то
> это не мешает

Судя по тому, что ты здесь, видимо, мешает.


 
PZ   (2006-12-26 12:50) [31]

> [30] evvcom ©   (26.12.06 09:06)

Возможно мешает. Я больше так не пишу.

Итак, что я выяснил. У меня есть процедура, чтобы можно было перемещать окно при нажатой левой кнопке мыши:

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
 inherited;
 if M.Result = htClient then M.Result := htCaption;
end;

Так вот, если закомментировать эту процедуру, то окошко закрывется по следующему обработчику, иначе нет:

procedure TForm1.Label1DblClick(Sender: TObject);
begin
 ModalResult := mrOk;
end;

Теперь я в полном тупике. Не знаю, как сохранить возможность перемещать окно и закрывать его по ненадобности.
Если кто-то может, пожалуйста помогите.


 
Anatoly Podgoretsky ©   (2006-12-26 12:53) [32]

> PZ  (26.12.2006 12:50:31)  [31]

А чего ты хочешь, сам же навесил на кнопку две взаимоисключающие вещи.


 
novill ©   (2006-12-26 12:54) [33]

повесь свою процедуру только на wm_mousemove


 
novill ©   (2006-12-26 13:00) [34]

> [33] novill ©   (26.12.06 12:54)

не, не пойдет


 
palva ©   (2006-12-26 13:03) [35]

Alt-F4 разве не срабатывает?


 
PZ   (2006-12-26 13:06) [36]

> [35] palva ©   (26.12.06 13:03)

Не пробовал


 
PZ   (2006-12-26 13:09) [37]

> [36] PZ   (26.12.06 13:06)

Попробовал - срабатывает. Но я этми кнопками никогда не пользуюсь, не люблю.
В крайнем случае придется...


 
novill ©   (2006-12-26 13:10) [38]

как насчет того чтобы перенести закрытие в обработчик WM_LBUTTONDBLCLK


 
PZ   (2006-12-26 13:20) [39]

> [38] novill ©   (26.12.06 13:10)

Я, к сожалению, с собщениями Windows не очень в дружбе.
Может быть Вы напишите примером.

Я попробовал  PostMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, 0), тоже никакой реакции.


 
novill ©   (2006-12-26 13:47) [40]

> [39] PZ   (26.12.06 13:20)

как пробовал? кинь код. я не знаю, где и что ты еще успел перехватить


 
PZ   (2006-12-26 13:51) [41]

> [40] novill ©   (26.12.06 13:47)

procedure TForm1.Label1DblClick(Sender: TObject);
begin
 PostMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;


 
PZ   (2006-12-26 13:56) [42]

Т. е. у меня сейчас два обработчикка:

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if M.Result = htClient then M.Result := htCaption;
end;

procedure TForm1.Label1DblClick(Sender: TObject);
begin
PostMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;


 
novill ©   (2006-12-26 14:22) [43]

Учитывая
> Я, к сожалению, с собщениями Windows не очень в дружбе.

рекомендую воспользоваться обычными событиями, возььмите соседния пример в Дельфиворлд:

public
 { Public declarations }
 Draging: Boolean;
 X0, Y0: integer;



Draging - для обозначение того периода времени когда пользователь перемещает мышь с зажатой кнопкой мыши,
X0 и Y0 - координаты точки, над которой была зажата кнопка мыши
Далее описываем события формы OnMouseDown, OnMouseMove и OnMouseUp:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
 Draging := true;
 x0 := x;
 y0 := y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
 Draging := false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
 if Draging = true then
 begin
   Form1.Left := Form1.Left + X - X0;
   Form1.top := Form1.top + Y - Y0;
 end;
end;



тогда у вас ничего не будет перехватыватсья лишнего


 
novill ©   (2006-12-26 14:33) [44]

естесственно события вешать на события не на формы, а лейбла.


 
PZ   (2006-12-26 14:46) [45]

> [43] novill ©   (26.12.06 14:22)

Как обычно, все гениальное просто!
Нормально работает.
Смутила меня эта процедура Орлика для перемещения окна без заголовка. Почему-то я думал, что без нее ни чем сдвинуть с места окно невозможно.

Спасибо, novill, еще раз спасибо всем-всем, принимавшим участие в обсуждении.
С уважением, PZ.

С наступающим Новым Годом!


 
PZ   (2006-12-26 14:48) [46]

> [44] novill ©   (26.12.06 14:33)

Да, естественно. Я так и сделал



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

Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.012 c
2-1167045529
Slimer
2006-12-25 14:18
2007.01.14
Фильтр БД sting&integer


15-1166649649
Chort
2006-12-21 00:20
2007.01.14
В чем ошибка?


4-1156830194
vodvorezlaya
2006-08-29 09:43
2007.01.14
Как запустить программу от имени Администратора


8-1148304118
F@R@_on
2006-05-22 17:21
2007.01.14
Иконки


2-1166791290
Rolevik
2006-12-22 15:41
2007.01.14
Задание атрибутов музыкальных файлов





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