Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.073 c
2-1271740246
serhiyiv
2010-04-20 09:10
2010.08.27
Прочитать текст с екрана


15-1266417633
Kerk
2010-02-17 17:40
2010.08.27
Сурков, замруководителя администрации президента, о модернизации


15-1274271369
XXL
2010-05-19 16:16
2010.08.27
Есть ли способ корректно рисовать анимацию под терминалкой ?


2-1266055243
V
2010-02-13 13:00
2010.08.27
Объявление массива


2-1272603366
oleg1963lora
2010-04-30 08:56
2010.08.27
А что у нас сегодня в DataSet e?