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

Вниз

Двойной клик по заголовку формы   Найти похожие ветки 

 
Alexey   (2011-11-30 22:42) [0]

Добрый вечер!

Подскажите, пожалуйста, форма имеет стиль bsSingle, иконка biMaximaze запрещена, окно распахнуто на весь экран.

НО, при двойном клике на заголовке формы она восстанавливает свой размер, и, соответственно, обратно не разворачивается.

Вопрос - как запретить такой двойной клик?

Заранее спасибо!


 
sniknik ©   (2011-11-30 23:23) [1]

> она восстанавливает свой размер
не восстанавливает

> Вопрос - как запретить такой двойной клик?
не мешать в кучу VCL и WinApi, особенно если не знаешь ни того ни другого.


 
Alexey   (2011-11-30 23:37) [2]

> не мешать в кучу VCL и WinApi, особенно если не знаешь ни того ни другого.

Я ничего не мешал, просто задал вопрос...


 
sniknik ©   (2011-11-30 23:44) [3]

не мешал, значит все работает.


 
Ega23 ©   (2011-12-01 00:26) [4]


> Вопрос - как запретить такой двойной клик?


Обработать WM_NCLBUTTONDBLCLK


 
Германн ©   (2011-12-01 01:29) [5]


> Подскажите, пожалуйста, форма имеет стиль bsSingle, иконка
> biMaximaze запрещена, окно распахнуто на весь экран.
>
> НО, при двойном клике на заголовке формы она восстанавливает
> свой размер, и, соответственно, обратно не разворачивается.
>
>
> Вопрос - как запретить такой двойной клик?
>

http://www.gunsmoker.ru/2008/10/x-y-z.html

Форма работает в полном соответствии с тем, какие свойства ей ты задал.

<offtop>
А Олежке я бы тоже посоветовал перечитать сию сагу.
</offtop>


 
Alexey   (2011-12-01 06:16) [6]

Всем спасибо, тему можно закрывать


 
Anatoly Podgoretsky ©   (2011-12-01 09:54) [7]

> Alexey  (30.11.2011 22:42:00)  [0]

Запретил biMaximaze и теперь возмущаешься, хорошо, что хоть система
исправила неверно созданое окно при первом двойном клике


 
sniknik ©   (2011-12-01 10:26) [8]

> Запретил biMaximaze
запретил, и тут же программно его таким сделал. ... далее по тексту.
+1


 
Anatoly Podgoretsky ©   (2011-12-01 12:07) [9]

> sniknik  (01.12.2011 10:26:08)  [8]

Далее дважды щелкнул и система все исправила, и больше гадость не дает
делать.


 
Alexey   (2011-12-01 20:52) [10]

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

Даже еще проще напишу - мне нужно чтобы форма была распахнута на весь экран всегда, имела заголовок и кнопку "свернуть" и при двойном клике на заголовке ничего не происходило.

Подскажите, пожалуйста, если такое возможно, то как сделать?

Спасибо!


 
sniknik ©   (2011-12-01 21:37) [11]

в дизайне у формы выставить WindowState = wsMaximized и BorderIcons = [biSystemMenu,biMinimize] и все. стиль оставит bsSizeable как есть по умолчанию.


 
sniknik ©   (2011-12-01 21:42) [12]

ха. сори, вот так действительно не работает. у меня стоял пустой обработчик от вчерашнего...
Ega23 ©   (01.12.11 00:26) [4]
> Обработать WM_NCLBUTTONDBLCLK


 
Alexey   (2011-12-01 22:39) [13]

>ха. сори, вот так действительно не работает. у меня стоял пустой обработчик от >вчерашнего...
>Ega23 ©   (01.12.11 00:26) [4]
>> Обработать WM_NCLBUTTONDBLCLK

Я не знаю, правильное ли это решение, но сделал так же и, собственно, добился того, чего хотел)

Так что спасибо за помощь, в итоге-то получилось.

Правда, если это решение не правильное и есть правильное решение - буду рад его узнать.

Спасибо!


 
Германн ©   (2011-12-02 01:03) [14]


> Правда, если это решение не правильное и есть правильное
> решение - буду рад его узнать.

Для нестандартных вопросов/задач "правильных решений", как правило, не существует.


 
Ega23 ©   (2011-12-02 01:37) [15]


> А Олежке я бы тоже посоветовал перечитать сию сагу.


Олежка когда-то давно поимел проблем с этим делом. Чтобы форма была не диалогом, но при этом максимайзд и не изменялась по дабл-клику. Так что он (Олежка) залез в древний код и вспомнил, как оно делалось.
Хотя он (Олежка) до сих пор не уверен, что это было действительно правильное и грамотное решение.


 
Омлет ©   (2011-12-02 09:56) [16]

Такие формы - архитектурная (интерфейсная) ошибка.


 
OW ©   (2011-12-02 10:04) [17]

от магических чисел избавится по справочнику сообщений

 public       { Public declarations }
   procedure DefaultHandler(var Message); override;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.DefaultHandler(var Message);
begin
 if TMessage(Message).Msg = 274 then
 begin
   if TMessage(Message).WParam = 61730 then
   begin
     mmo1.Lines.Add(IntToStr(TMessage(Message).WParam));
     mmo1.Lines.Add(IntToStr(TMessage(Message).LParam));
   end else
     inherited;
 end else
   inherited;
end;


 
Омлет ©   (2011-12-02 10:15) [18]

>   if TMessage(Message).Msg = 274 then
>   begin
>     if TMessage(Message).WParam = 61730 then
>     begin
>       mmo1.Lines.Add(IntToStr(TMessage(Message).WParam));
>       mmo1.Lines.Add(IntToStr(TMessage(Message).LParam));
>     end else
>       inherited;
>   end else
>     inherited;


Некрасиво.


 
OW ©   (2011-12-02 10:40) [19]


> Омлет ©   (02.12.11 10:15) [18]

ну не знаю,
у меня DefaultHandler обычно работает на полную катушку(по моим, прикладным делам), воткнуть туда еще одну проверку - вполне вариант

if TMessage(Message).Msg = КАКТО_SYSCOMMAND
  and TMessage(Message).WParam = КАК_ТО_КESTORE then
съесть сообщение else
inherited


 
OW ©   (2011-12-02 11:31) [20]


> у меня DefaultHandler обычно работает на полную катушку(по
> моим, прикладным делам)

Буду толкать эту мысль еще раз
(а что делать, система закрыта на перерасчет, программисты у нас сегодня курят:) )
в DefaultHandler конструкция
if TMessage(Message).Msg = XXX then
дает очень много.

объявив где то в отдельном модуле
 TAgent = record
   ID_AGENT: int64;
   AName: string;
   AComment: string;
   Alias: string;
 end;
 TContract = record
   IdContract: Integer;
   CNumber: string;
   DateBegin: TDateTime;
   DateEnd: TDateTime;
   Agent: TAgent;
   Subject: TSubjectFor; // еще что-то еще можно, не важно
 end;
и
TMsgContract = packed record
   Msg: LongInt;
   Contract: TContract;
 end;

а так же имея
Const
 ESBD_BASIC = WM_USER + $200;
..
 ESBD_SELECT_CONTRACT = ESBD_BASIC + $90;
..
 ESBD_LAST =  ESBD_BASIC + $FF;

пишем например
procedure TMainForm.DefaultHandler(var Message);
var
 i:Integer;
begin
 if (TMessage(Message).Msg >= ESBD_BASIC)
    and (TMessage(Message).Msg <= ESBD_LAST) then
 begin

   case TMessage(Message).Msg of
   // это только для меня
     ESBD_SEND_HANDLE_PLUGIN : InitPlugin(TMsgPluginInfo(Message).P);
     ESBD_REBUILDBUTTON:  ReBuildButton(nil);
     ESBD_SUBJECT_REMOVE_FROM_MEMORY: RemoveSubjectFromMemory(TMSGSubjectRemoveFromMemory(Message).Subject.ID);
     ESBD_BRANCH_REMOVE_FROM_MEMORY : RemoveBranchFromMemory(TMSGBranchRemoveFromMemory(Message).Branch.ID);
     ESBD_LOGIN_USER: ReLoginUser(TMsgLoginUser(Message).UserID);
     else
     // а это для всех
       begin
         // эти и для меня тоже
         if TMessage(Message).Msg = ESBD_SUBJECT_FOR_EDIT then
         begin
           if not(TMSGSubjectForEdit(Message).Subject.IsNew) then
             AddSubjectToBuffer(TMSGSubjectForEdit(Message).Subject.ID);
         end;
         if TMessage(Message).Msg = ESBD_FILIAL_CHANGE then
         begin
           FilialChange(TFilialChangeMSG(Message).Filial);
         end;
         // остальные не знаю, но всем разошлю
         for i := 0 to MainForm.MDIChildCount - 1 do MainForm.MDIChildren[i].Dispatch(Message);
       end;
   end;
 end else
 inherited;

теперь, любое окно, что-то сделав, может сказать главному
procedure TfrmContract.Select(Sender: TObject);
var
 Msg: TMsgContract;
begin
 MSG.Msg := ESBD_SELECT_CONTRACT;
 Msg.Contract.IdContract := oqBase.FieldByName("ID_CONTRACT").AsInteger;
 Msg.Contract.CNumber := oqBase.FieldByName("CNUMBER").AsString;
 Msg.Contract.DateBegin := oqBase.FieldByName("DATE_BEGIN").AsDateTime;
 Msg.Contract.DateEnd := oqBase.FieldByName("DATE_END").AsDateTime;
 Msg.Contract.Agent.ID_AGENT := oqBase.FieldByName("ID_AGENT").AsInteger;
 Msg.Contract.Agent.AName := oqBase.FieldByName("ANAME").AsString;
 Msg.Contract.Subject.ID :=  oqBase.FieldByName("ID_SUBJECT").AsInteger;
 Msg.Contract.Subject.Name := oqBase.FieldByName("SNAME").AsString;
 MainForm.Dispatch(MSG);

И все окна (приложения (и не только, если надо)) получат это сообщение, а кто из них заинтересован в смене юзером текущего контракта, могут рефрешнуть свои данные, породить иные сообщения, послав их в MainForm, что бы отреагировали на них иные.

главное окно, не зная сообщений, все равно их рассылает.
остальные окна , не зная сообщений, все равно их принимают и игнорируют(ну, раз не знают как реагировать).

В любой момент в соотв. DefaultHandler любого окна просто вставляем реакцию на имеющиеся в хождении в программе сообщения, и окно реагирует на эти эээ.. "публичные" действия всех участников процесса :)



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

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

Наверх





Память: 0.52 MB
Время: 0.004 c
2-1323056747
hlopcikz
2011-12-05 07:45
2012.03.18
Как слинковать соеденение?


15-1313642062
runer
2011-08-18 08:34
2012.03.18
Как расшарить принтер в WIN7?


2-1323244056
Дмитрий_
2011-12-07 11:47
2012.03.18
восстановить курсор если найдена запись


2-1323062407
kulakovboris
2011-12-05 09:20
2012.03.18
Утечка памяти на ровном месте


2-1322804005
cahier
2011-12-02 09:33
2012.03.18
Вопрос по TStringList





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