Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как закрыть модальное окно?


Страницы:   1 2 3

PZ ©   (2006-12-25 12:51:00) 

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

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

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

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


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

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

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


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

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

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

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

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


novill   (2006-12-26 14:33:00) [3]

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


novill   (2006-12-26 14:22:00) [4]

Учитывая
> Я, к сожалению, с собщениями 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;



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


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

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

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;


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

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

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


novill   (2006-12-26 13:47:00) [7]

> [39] PZ   (26.12.06 13:20)

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


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

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

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

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


novill   (2006-12-26 13:10:00) [9]

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


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

> [36] PZ   (26.12.06 13:06)

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


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

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

Не пробовал


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

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


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

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

не, не пойдет


novill   (2006-12-26 12:54:00) [14]

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


Anatoly Podgoretsky   (2006-12-26 12:53:00) [15]

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

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


PZ   (2006-12-26 12:50:00) [16]

> [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;

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


evvcom   (2006-12-26 09:06:00) [17]

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

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


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

> [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


Anatoly Podgoretsky   (2006-12-25 15:18:00) [19]

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

self тоже лишнее


alex_***   (2006-12-25 15:10:00) [20]

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо