Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.07.2009, 09:36
Lisdrummer Lisdrummer вне форума
Прохожий
 
Регистрация: 20.06.2009
Сообщения: 25
Репутация: 10
По умолчанию Вопрос про модальные окна

Здравствуйте!
Когда я создаю модальные окна с помощью имя_Формы.ShowModal я хочу, что бы окно не двигалось по экрану, а оставалось на заранее определенном месте, и что бы при попытке подвигать его или попытаться скрыть при помощи щелчка мышью за его пределами окно издавало характерный звук, примерно такой какой издают виндоузовские диалоговые окошки.
Заранее спасибо за ответ!
Ответить с цитированием
  #2  
Старый 01.07.2009, 18:49
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Вроде как простой вариант :

1. Присвоить значение свойству FormStyle главной формы приложения fsStayOnTop;

2. В диалоговом окне создать обработчик события WM_NCHITTEST:

Код:
uses
  Messages,

type
  TOKRightDlg = class(TForm)
    OKBtn: TButton;
    CancelBtn: TButton;
  private
   procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
  public
    function Execute : boolean;
  end;

implementation

procedure TOKRightDlg.WMNCHitTest(var Message: TWMNCHitTest);
begin
inherited;
with Message do
   if Result = HTCAPTION then begin
      Result := HTNOWHERE;
   end;
end;


3. В методе Execute (диалога) указать :

Код:
function TOKRightDlg.Execute : boolean;
begin
  Result:=false;

  Application.NormalizeTopMosts; //  ЭТО

  if ShowModal = mrOk then begin
    Result:=true;

  end;
end;

4. Вызывать из главной формы так :

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.BringToFront;
  OKRightDlg.Execute;
end;


Вроде бы работает ...
Ответить с цитированием
  #3  
Старый 01.07.2009, 20:52
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

roamer, одного не предусмотрели: Alt+Space -> Переместить
И — хоть заперемещайте окно стрелками. =)

А вообще — вот...
Код:
...
type
  TForm2 = class(TForm) // это ваше модальное окно
  private
    { Private declarations }
    procedure WMWINDOWPOSCHANGING(var Msg: TMessage); message WM_WINDOWPOSCHANGING;
  public
    { Public declarations }
  end;

...

procedure TForm2.WMWINDOWPOSCHANGING(var Msg: TMessage);
begin
  PWindowPos(Pointer(Msg.LParam))^.flags := PWindowPos(Pointer(Msg.LParam))^.flags or SWP_NOMOVE;
  inherited;
end;
Ответить с цитированием
  #4  
Старый 02.07.2009, 10:32
Lisdrummer Lisdrummer вне форума
Прохожий
 
Регистрация: 20.06.2009
Сообщения: 25
Репутация: 10
По умолчанию

Спасибо!!!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter