|
| Opfange færdigt resize Fra : Mark S. Rasmussen |
Dato : 11-01-03 12:05 |
|
Hej alle.
Jeg har en form som hele tiden skal have en størrelse der kan divideres med
30, og give et heltal (30, 60, 90, 120) osv. Den skal altså følge et grid,
ligesom hvis man ændrer størrelse på objekter i Delphis IDE. Til at gøre det
regnede jeg med at kunne opfange når brugeren havde ændret størrelse på
formen, og så herefter bare sætte størrelsen til nærmeste afrunding af et
tal dividerbart med 30. Men hvordan opfanger jeg når brugeren er _færdig_
med at resize? OnResize eksekveres jo hele tiden brugeren holder musen nede
mens han ændrer størrelse.
Det perfekte ville selvfølgelig være hvis man kunne resize formen efter et
grid, altså så forments størrelse sprang når man nærmede sig næste
dimensionsmulighed, men det er vel ikke umiddelbart muligt?
Mvh Mark
--
www.improve.dk
| |
Harald (12-01-2003)
| Kommentar Fra : Harald |
Dato : 12-01-03 17:15 |
|
"Mark S. Rasmussen" <mark@tv.dk> skrev i en meddelelse
news:avri5j$2m78$1@news.cybercity.dk...
> Hej alle.
>
> Jeg har en form som hele tiden skal have en størrelse der kan divideres
med
> 30, og give et heltal (30, 60, 90, 120) osv. Den skal altså følge et grid,
> ligesom hvis man ændrer størrelse på objekter i Delphis IDE. Til at gøre
det
> regnede jeg med at kunne opfange når brugeren havde ændret størrelse på
> formen, og så herefter bare sætte størrelsen til nærmeste afrunding af et
> tal dividerbart med 30. Men hvordan opfanger jeg når brugeren er _færdig_
> med at resize? OnResize eksekveres jo hele tiden brugeren holder musen
nede
> mens han ændrer størrelse.
Jeg tror at WM_SIZE kan det du har brug for.
Fra help: "The WM_SIZE message is sent to a window after its size has
changed."
Mvh
HK
| |
Mark S. Rasmussen (11-01-2003)
| Kommentar Fra : Mark S. Rasmussen |
Dato : 11-01-03 17:30 |
|
> Jeg tror at WM_SIZE kan det du har brug for.
> Fra help: "The WM_SIZE message is sent to a window after its size has
> changed."
Tak, det må jeg lige prøve. Den ryger vel bare ind i en if sætning i
Application.OnMessage går jeg ud fra?
Mvh Mark
| |
Harald (13-01-2003)
| Kommentar Fra : Harald |
Dato : 13-01-03 09:00 |
|
"Mark S. Rasmussen" <mark@tv.dk> skrev i en meddelelse
news:avs578$ema$1@news.cybercity.dk...
> > Jeg tror at WM_SIZE kan det du har brug for.
> > Fra help: "The WM_SIZE message is sent to a window after its size has
> > changed."
>
> Tak, det må jeg lige prøve. Den ryger vel bare ind i en if sætning i
> Application.OnMessage går jeg ud fra?
Nej Application.OnMessage modtager ikke WM_SIZE, hvorfor ved jeg ikke, så du
må lave din egen message metode til WM_SIZE.
f.eks.: procedure WMSIZE(var Msg: TMsg); message WM_SIZE;
Mvh
HK
| |
Mark S. Rasmussen (12-01-2003)
| Kommentar Fra : Mark S. Rasmussen |
Dato : 12-01-03 13:51 |
|
> Nej Application.OnMessage modtager ikke WM_SIZE, hvorfor ved jeg ikke, så
du
> må lave din egen message metode til WM_SIZE.
>
> f.eks.: procedure WMSIZE(var Msg: TMsg); message WM_SIZE;
Hej igen.
Jeg har lige prøvet at lave en procedure som du beskriver her, og som der
bliver beskrevet i hjælp funktionen. Det virker dog ikke, WM_SIZE bliver
også kaldt mens brugeren er i gang med at ændre formens størrelse, den skal
kun kaldes når brugeren _har_ ændret formens størrelse, og har sluppet musen
igen. Gør jeg noget forkert? :(
Mvh Mark
| |
Harald (13-01-2003)
| Kommentar Fra : Harald |
Dato : 13-01-03 14:32 |
|
"Mark S. Rasmussen" <mark@tv.dk> skrev i en meddelelse
news:avuco4$ke$1@news.cybercity.dk...
> > Nej Application.OnMessage modtager ikke WM_SIZE, hvorfor ved jeg ikke,
så
> du
> > må lave din egen message metode til WM_SIZE.
> >
> > f.eks.: procedure WMSIZE(var Msg: TMsg); message WM_SIZE;
>
> Hej igen.
>
> Jeg har lige prøvet at lave en procedure som du beskriver her, og som der
> bliver beskrevet i hjælp funktionen. Det virker dog ikke, WM_SIZE bliver
> også kaldt mens brugeren er i gang med at ændre formens størrelse, den
skal
> kun kaldes når brugeren _har_ ændret formens størrelse, og har sluppet
musen
> igen. Gør jeg noget forkert? :(
Næ det gør du ikke, det er rigtig at hvis brugeren hiver meget langsom i
formen eller holder en pause så får man flerer WM_SIZE sendt. Jeg kan ikke
lige komme på en anden løsning.
Mvh
HK
| |
Ulrik Vadstrup (13-01-2003)
| Kommentar Fra : Ulrik Vadstrup |
Dato : 13-01-03 15:11 |
|
"Harald" <swobu@kroning.dk> wrote in message
news:3e22bfb7$0$71714$edfadb0f@dread11.news.tele.dk...
>
> > Hej igen.
> >
> > Jeg har lige prøvet at lave en procedure som du beskriver her, og som
der
> > bliver beskrevet i hjælp funktionen. Det virker dog ikke, WM_SIZE bliver
> > også kaldt mens brugeren er i gang med at ændre formens størrelse, den
> skal
> > kun kaldes når brugeren _har_ ændret formens størrelse, og har sluppet
> musen
> > igen. Gør jeg noget forkert? :(
>
> Næ det gør du ikke, det er rigtig at hvis brugeren hiver meget langsom i
> formen eller holder en pause så får man flerer WM_SIZE sendt. Jeg kan ikke
> lige komme på en anden løsning.
>
> Mvh
> HK
>
Kunne man ikke sætte en boolean ved WM_SIZE, og så checke den boolean ved
Mouse up ?
Eller er det fusk ?
Ulrik
| |
Mark S. Rasmussen (12-01-2003)
| Kommentar Fra : Mark S. Rasmussen |
Dato : 12-01-03 18:16 |
|
> Kunne man ikke sætte en boolean ved WM_SIZE, og så checke den boolean ved
> Mouse up ?
Jeg har tænkt over det samme, men såvidt jeg ved så bliver MouseUp ikke
fanget af formen når det er ved resize. Jeg overvejer dog at sætte en
boolean værdi ved WM_SIZE, og så have en timer der kører en gang i sekundet,
og herefter ændrer formens størrelse til det rigtige. Men det er jo også
noget skidt kode :(
Mvh Mark
| |
Steen Jensen (14-01-2003)
| Kommentar Fra : Steen Jensen |
Dato : 14-01-03 13:10 |
|
Hej Mark
"Mark S. Rasmussen" <mark@tv.dk> skrev i en meddelelse
news:avus96$j5f$1@news.cybercity.dk...
> > Kunne man ikke sætte en boolean ved WM_SIZE, og så checke den boolean
ved
> > Mouse up ?
>
> Jeg har tænkt over det samme, men såvidt jeg ved så bliver MouseUp ikke
> fanget af formen når det er ved resize. Jeg overvejer dog at sætte en
> boolean værdi ved WM_SIZE, og så have en timer der kører en gang i
sekundet,
> og herefter ændrer formens størrelse til det rigtige. Men det er jo også
> noget skidt kode :(
>
> Mvh Mark
>
>
Du kan fange WM_EXITSIZEMOVE i stedet for WM_SIZE.
procedure WMExitsizemove(var Msg: TMessage);
message WM_EXITSIZEMOVE;
og i implementation
procedure TForm1.WMExitsizemove(var Msg: TMessage);
begin
if Msg.Msg = WM_EXITSIZEMOVE then
ShowMessage('hej');
end;
PS du fik den på mail også, det var ikke meningen.
Med venlig hilsen
Steen
| |
Marius Thomsen (17-01-2003)
| Kommentar Fra : Marius Thomsen |
Dato : 17-01-03 19:56 |
|
Kunne du ikke bruge en resize, der selv retter ind:
procedure TForm1.FormResize(Sender: TObject);
begin
Form1.Width:= 30*round(Form1.Width / 30 );
Form1.height:= 30*round(Form1.height / 30 );
Label3.Caption:=IntToStr(form1.width);
Label4.Caption:=IntToStr(form1.height);
end;
Eller har jeg bare misforstået det ?
MVH
Marius Thomsen
| |
Mark S. Rasmussen (19-01-2003)
| Kommentar Fra : Mark S. Rasmussen |
Dato : 19-01-03 15:49 |
|
> procedure TForm1.FormResize(Sender: TObject);
> begin
> Form1.Width:= 30*round(Form1.Width / 30 );
> Form1.height:= 30*round(Form1.height / 30 );
> Label3.Caption:=IntToStr(form1.width);
> Label4.Caption:=IntToStr(form1.height);
> end;
>
> Eller har jeg bare misforstået det ?
Det kan ikke bruges da FormResize bliver eksekveret med det samme brugeren
har ændret formens størrelse én pixel. Og så ville den jo ændre formen
tilbage til dens oprindelige størrelse, og brugeren vil således aldrig kunne
ændre formens størrelse. Steen Jensen har givet et svar på hvordan jeg
opfanger et færdigt resize, og det fungerer perfekt.
Mvh Mark
| |
|
|