/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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,

> 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



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste