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

Вниз

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

 
andreil ©   (2008-07-10 13:30) [0]

Мне необходимо в своей форме самому рисовать СВЕ контролы включая рамку и заголовок. Но вот с реализацией с стопорнулся.
Если у формы выставить BorderStyle в fbsNone, то рамки нету ВООБЩЕ + нету выпадающей менюшки со списком операций над окном (при клике правой мышкой по кнопке приложения на панели задач.

Мне необходимо сделать так, что бы:
 1) у формы отсутствовали (только визуально) стандартные рамка и заголовок;
 2) необходимо самому рисовать заголов;
 3) необходимо, что бы на рисуемом мною заголовке работали перетаскивание и клик правой кнопкой мыши.

Как это можно реализовать?


 
Rouse_ ©   (2008-07-10 14:12) [1]

обрабатывай WM_NCPAINT и WM_HITTEST


 
andreil ©   (2008-07-10 15:04) [2]

А как?
Как их словить, я знаю, но вот что дальше делать?


 
andreil ©   (2008-07-11 12:38) [3]

Ладно с рамкой разобрался - рисую вручную + сам сдела перетаскивание окна (через ВинАПИ) и изменение его размера (свой код).
Но - как сделать так, что бы при клике правой кнопкой мыши по моему контролу появлялось выпадающее меню (как будто щелкнул по заголовку простого окна)? И как добавить такую же менюшку при клике по значку на панели задач (не в трее)? У меня ведь у формы выставлено
Form.borderStyle=fbsNone


 
=BuckLr= ©   (2008-07-11 21:17) [4]


> как добавить такую же менюшку при клике по значку на панели
> задач

по-моему, тут applet при делах... эт его менюшка (как и кнопка) в панели задач


 
=BuckLr= ©   (2008-07-11 21:18) [5]

я в смысле - добавить апплет


 
andreil ©   (2008-07-12 11:17) [6]

Добавил - эффекта нету.
Я же сказал, что заголовка окна у меня нету, как и рамки вокруг окна.
При клике правой кнопкой мыши по приложению на панели задач не выскакивает менюшка (для операций над окном), а мне она нужна, так же, как и такаяже при клике на одном из контролов на форме (выполняющем роль заголовка формы).
Говорю сразу - стандартное окно меня не устраивает, тк окно ПОЛНОСТЬЮ рисуется моим кодом (оформление окна).


 
Compiler ©   (2008-07-13 17:42) [7]


> не выскакивает менюшка (для операций над окном), а мне она
> нужна

BorderStyle=fbsSingle
procedure TForm1.KOLFormFormCreate(Sender: PObj);
var
 m:HMENU; i:integer;
begin
form.Style:= form.Style  and not (WS_BORDER or WS_THICKFRAME or WS_DLGFRAME or WS_CAPTION
                            or WS_MINIMIZEBOX or WS_MAXIMIZEBOX);
m:=GetSystemMenu(Applet.Handle,False);
for i:=0 to GetMenuItemCount(m)-1 do
  DeleteMenu(m,0,MF_BYPOSITION);  
end;

function TForm1.KOLApplet1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
const
 TIMER_ID = 4321;
var
 CPos:TPoint;    m:HMENU;
begin
Result:=False;
case msg.message of
WM_INITMENUPOPUP:
  if (msg.hwnd=Applet.Handle) then
    SetTimer(Applet.Handle,TIMER_ID,10,nil);
WM_TIMER:
  if (msg.wParam=TIMER_ID) then
  begin
    KillTimer(Applet.Handle,msg.wParam);
    GetCursorPos(CPos);
    m:=GetSystemMenu(form.Handle,False);
    TrackPopupMenu(m, TPM_LeftAlign or TPM_TopAlign, CPos.X, CPos.Y, 0, form.Handle, nil);
  //  Popupmenu1.Popup(CPos.X, CPos.Y);//Можно прикрутить свое меню
  end;
 WM_COMMAND:
 if (msg.hwnd=Form.Handle) then
 case msg.wParam of
  SC_RESTORE,SC_CLOSE,SC_MINIMIZE,SC_MAXIMIZE,SC_MOVE,SC_SIZE:
    Form.Perform(WM_SYSCOMMAND,msg.wParam,Msg.lParam);
   end;
 end;  
end;


 
andreil ©   (2008-07-14 09:57) [8]

Спасибо, попробуем...


 
andreil ©   (2008-07-14 12:08) [9]

Помогло! :) Спасибо большое!

Но, если можно, то еще один вопрос - как менять размер окна (с изменением курсора на соотв.), если у меня нету бордюра? Я пока сделал это своим кодом, перехватывая мышь, но у этого метода есть недостаток - если пользователь слишком резко перетащит мышь, то она уходит из фокуса окна :( Нету ли решения этой пролблемы без лишнего кода, а "обманом" Виндоус (наподобие высшенаходящегося кода)?


 
Compiler ©   (2008-07-14 17:07) [10]

Из флагов
> (WS_BORDER or WS_THICKFRAME or WS_DLGFRAME or WS_CAPTION
>                            or WS_MINIMIZEBOX or WS_MAXIMIZEBOX)
> ;

выкинуть WS_THICKFRAME



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

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

Наверх




Память: 0.47 MB
Время: 0.081 c
15-1268248494
кот
2010-03-10 22:14
2010.08.27
как прочитать ПЗУ через параллельный порт


2-1268466438
NBAH1990
2010-03-13 10:47
2010.08.27
Как сжать Jpg картинку?


6-1217926149
dima_tepl
2008-08-05 12:49
2010.08.27
Работа с микроконтроллером по TCP/IP протоколу


2-1272606997
mfender
2010-04-30 09:56
2010.08.27
Наследование. Запутался.


15-1271847638
Scot Storch
2010-04-21 15:00
2010.08.27
БД кожгалантерейного магазина





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