Grænser

Tags:    delphi

<< < 12 > >>
Er det muligt at kunne skrive

form1.width := form1.width +1;

men så med grænser? så den ikke fortsætter uendeligt.



11 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
når du gør formen mindre skal du bruge max.
når du gør formen større skal du bruge min.

Eksemple:
Fold kodeboks ind/udKode 


timeren er sat til 20.
det kan selvfølgelig også laves med 2 timere så kan du spare den yderste if sætning.



Indlæg senest redigeret d. 12.04.2006 07:23 af Bruger #5620
Jeg må vel også hellere skrive mit forslag som et copy paste unit... :D

Fold kodeboks ind/udKode 


jeg har ikke testet koden da jeg ikke har installeret delphi.

//Troels



Indlæg senest redigeret d. 12.04.2006 12:33 af Bruger #2967
Du kan også bare have en for-løkke:

Fold kodeboks ind/udKode 


Da det er småtteri som at udvide og sammentrække en form, kan det fint gå med sleep, men måske skal de 20 ms ændres...



du kan bruge en if

if form1.width < MAX then form1.width := form1.width +1;

//Troels



du kan bruge max fra Math uniten.

form1.width :=max(form1.width +1,EN_ELLER_ANDEN_MAX_VÆRDI);



hvordan kan jeg så skrive, at når

form1.width = xxx then
begin
en nedtælling, og når der er gået 3 sekunder, så skal
der hoppe en showmessage op

jeg får jo to if-sætninger inde i hinanden?



det gået op for mig at det jeg sagde var noget sludder det skal være min og ikke max.



hvordan du får 2 if sætninger inde i hinanden er ganske simpelt:
if(x<y) and (d=r) then f=2;
f.eks. and kan erstattes af andre "logiske" operatorer, disse er:
AND : betyder at begge udtryk skal være sande
OR : betyder at kun det ene udtryk behøver at være sand.
XOR : betyder at kun et af udtrykene må være sande, men et af dem skal være.

ellers på dit problem, du kan jo bare tilføje en tæller under var, kald den f.eks. counter : integer;

og så i din timer funktion kan du f.eks. skrive:
counter := counter +1;

//også kan du ellers lave en if for hvert tidsinterval:
if (counter > nedregrænse) and (counter < øvregrænse) then begin
//hvad der skal ske i det interval.
end;

//Troels



hmm, hvorfor virker det her ikke?

begin
form1.width := min(form1.width + 1, 500);
dec(counter);
if counter < 0 then
begin
form1.width := min(form1.width - 1, 300);
timer1.enabled := false;
end;
end;

formen skal gå stille tilbage, og ikke hoppe - det gider den ikke?




fordi du både deaktiverer timeren, hvilket hvis du har lavet som jeg tror stopper alt!. Og så trækker det fra som du lige har lagt til, hvilket svarer til 0 ændring.

har du du afprøvet mit forslag fra min sidste post i denne tråd?

//Troels



<< < 12 > >>
t