[ VRKY @ 12.12.2004. 14:54 ] @
| Ovako:
Stavio sam da mi je BorderStyle bsNone, i želi
U aplikaciji Cool Shutdown vidio sam nešto što mi se sviđa, a to je da je BorderStyle bsNone i da se ipak ta forma može micati, kao to napravit? Uradio sam neke Border Ikone (Close itd.) i sad mi još samo fali da se ta forma može pomicati (bsNone). Znači kako to uradit |
[ Aleksandar Ilić @ 12.12.2004. 15:07 ] @
Pogledaj ovaj primer i videćeš kako.
[ Voodoo @ 12.12.2004. 16:01 ] @
Ubaci sledece globalne promenljive:
Moving: Boolean;
OldX, OldY: Integer;
a za navedene evente kucaj:
MouseDown:
Moving := True;
OldX := X;
OldY := Y;
MouseMove:
if Moving then
begin
Form.Left := Form.Left + X - OldX;
Form.Top := Form.Top + Y - OldY;
end;
MouseUp:
Moving := False;
PS. Nisam pogledao Aleksandrov primer, cisto da ne bude da sam prepisao iz njega ukoliko je isto/slicno izvedeno...
[ Srki_82 @ 12.12.2004. 16:14 ] @
Primer koji je Alekstrade poslao je definitivno bolji. Time definises region koji se ponasao kao da je Title bar. Dakle ako recimo duplo kliknes na odredjeni deo forme za koji si definisao da je title bar windows ce poslati poruku WM_MAXIMIZE ili WM_RESTORE u zavisnosti od trenutnog stanja tvoje aplikacije. Ako imas okrugao prozor ovim nacinom mozes recimo definisati region koji je spoljni prsten tog tvog okriglog prozorcica, itd, itd... :)
P.S.
Hocu u tvoj tim :)
[ Voodoo @ 12.12.2004. 16:46 ] @
Pa i u ovom mom primeru moze to da se uradi... razvuces jedan TImage koji ce ti biti title bar, i umesto za Formu, napises MouseUp, MouseMove i MouseDown evente za taj TImage...
[ Aleksandar Ilić @ 12.12.2004. 19:06 ] @
Citat:
PS. Nisam pogledao Aleksandrov primer, cisto da ne bude da sam prepisao iz njega ukoliko je isto/slicno izvedeno...
Ovaj kod nisam ja pisao, našao sam ga internetu.
Autor je Marco Cantu.
[ VRKY @ 12.12.2004. 20:07 ] @
@bancika
kao si ti to napravio u svom programu?
[ bancika @ 12.12.2004. 20:37 ] @
ima sve u source-u, stavi dogadjaj OnMouseDown za komponentu koja hoces da ti pomera ceo prozor (recimo TImage koji ti sluzi kao novi TitleBar) i napisi sledece
Code:
if Button = mbLeft then
begin
ReleaseCapture;
Perform(WM_SYSCommand, $f019,0);
end;
to je sve.
[ VRKY @ 12.12.2004. 20:46 ] @
Nisam te dobro shvatio što sa OnMouseDown i onim kodom?
[ bancika @ 12.12.2004. 23:01 ] @
cekaj: ako te dobro razumem, ti hoces da dragujes formu klikom na neku komponentu posto TitleBar-a vise nema. Napravi dogadjaj OnMouseDown za tu komponentu i upisi kod koji sam ti dao. Recimo napravi slicicu Image1 i Image1OnMouseDown sa tim kodom. Efekat je to sto ces klikom na slicicu mocu da pomeras formu. Mozes i za formu da definises OnMouseDown...
[ Srki_82 @ 13.12.2004. 00:20 ] @
I dalje tvrdim da je WM_NCHITTEST bolje resenje jer ne zahteva nikakve dodatne komponente na formi, a osim title bara mogu se definisati i nove pozicije za bordere (top-left, top, top-right... itd) i windows sam pomera, menja velicinu ili sta vec treba kao da border stvarno postoji + panel i ostale komponente ne mogu biti recimo okrugle (jedino ako ne napravis nekoliko malih panelcica pa ih poredjas u krug), a kada radis hittest mozes da napravis okrugao region koji ce reagovati kao title bar ili nesto drugo. Mozes napraviti proizvoljan oblik za bilo sta.
[ bancika @ 13.12.2004. 00:42 ] @
oket, ali za ovako jednostavne stvari nema potrebe komplikovati
[ Srki_82 @ 13.12.2004. 00:51 ] @
Otkud znamo da nije komplikovana stvar :P
Salim se. Upravu si. Uvek treba program uraditi sto jednostavnije... tako se lakse debug-uje i lakse kasnije dodaju nove stvarcice. Onda mu u tom kodu jos samo nedostaje da na OnDblClick doda da se forma maximizuje odnosno vrati na pravu velicinu ako je vec bila maximizirana, a to je prilicno lako :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|