Toon posts:

[Delphi] Teken rectangle van groot naar klein

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende probleem:

Ik wil een rectangle tekenen die bijv eerst 50 bij 50 is en vervolgens 40 bij 50 wordt en dan 30 x 50 etc etc.

wat is nu het probleem:

ik maak een rectangel

rectangle1 : Trect;

rectangle1.left :=0;
rectangle1.right:=50;
rectangle1.bottom:=0;
rectangle1.Top:=50;
canvas.draw.rectangle(rectangle1);

en dan door bijv een for loop je die rectangle1.right met 10 af te laten nemen.
Als je dit doet dan blijft de originele rectangle van 50x50 nog gewoon op het scherm staan, in java heb je hier een repaint voor. In delphi heb je ook een repaint maar dat werkt niet zo als in java. Ik heb ook met invalidateRect geprobt maar dit heeft ook geen vruchten afgeworden.

Het is dus de bedoeling dat je de rect steeds 10 kleiner ziet worden zonder dat je de afbeelding van de vorige nog ziet staan. Hoe moet dit ook alweer.>>>???

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 20:23

Tomatoman

Fulltime prutser

Van welk object gebruik je het canvas?

Het is misschien net iets minder logisch dan je denkt, want je moet ook rekening houden met eventuele themes. Even uit mijn hoofd gezegd moet je de WM_DRAWBACKGROUND of CN_DRAWBACKGROUND message afvangen. Duik eens in de code van het TShape object, dan heb je een voorbeeld dat redelijk in de buurt komt van wat jij wilt.

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
nee, das echt te lastig je bent dan op een meer low level niveau dingen af aan het vangen, ik heb geen zin om met handles te werken, ik heb dit 1x op school gedaan in combinatie met c, en dat is echt poep, ik weet zeker dat het ook anders kan ik heb dit namelijk alles gedaan ik weet alleen niet meer hoe

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

Verwijderd schreef op 05 december 2003 @ 01:09:
Het is dus de bedoeling dat je de rect steeds 10 kleiner ziet worden zonder dat je de afbeelding van de vorige nog ziet staan. Hoe moet dit ook alweer.>>>???
Al iets in de richting van canvas.clear; geprobeerd?

De F1 toets is je beste vriend in delphi als je het even niet meer weet :)

Stop uploading passwords to Github!


  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Gebruik Fillrect om je vorige rectangle te wissen:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  rectangle1 : Trect;
begin
  with rectangle1 do
  begin
    left := 0;
    right := 50;
    bottom := 0;
    Top := 50;
  end;
  with canvas do
  begin
    fillrect(clientrect);
    rectangle(rectangle1);
  end;
end;

[ Voor 3% gewijzigd door Delpix op 05-12-2003 07:44 ]

...beter bekend als AMFan


Verwijderd

Topicstarter
HEEEJ dat lijkt er al meer op,

maar als ik de rectangle nu een kleur wil geven, hoe moet dat dan?? kan dat dan nog wel?

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Pen.color := clred;

voor een rood randje. Brush.color kan je gebruiken voor de binnenkant.

...beter bekend als AMFan


Verwijderd

En je kan ook gewoon een TShape (tabje Additional) nemen en daarmee tekenen. Als je daar de properties van aanpast dan vangt dit component zelf het opnieuw tekenen voor je af.

Verwijderd

Topicstarter
als ik Brush.Color:=CLRED; doe
dan wordt het hele canvas rood, en niet alleen de rectangle, dat was net het probleem wat ik had zeg maar
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.Button1Click(Sender: TObject);
begin
   CANVAS.Pen.Color:=CLBLACK;
   CANVAS.Brush.Color:=CLRED;
   with rect do
      begin
         left := 0;
         right := 50;
         bottom := 0;
         Top := 50;
      end;
   with IMAGE1.canvas do
      begin
         Brush.Color:=CLRED;
         fillrect(clientrect);
         rectangle(rect);
      end;
   I:=1;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   TIMER1.Enabled:=TRUE;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   with rect do
      begin
         left := 0+(15*I);
         right := 50+(15*I);
         bottom := 0;
         Top := 50;
      end;
   with IMAGE1.canvas do
      begin
         fillrect(clientrect);
         rectangle(rect);
      end;
   I:=I+1;
end;

[ Voor 2% gewijzigd door curry684 op 05-12-2003 11:39 . Reden: code-tags... doe dat voortaan zelf ff :) ]


Verwijderd

Topicstarter
Zou je misschien een voorbeeldje van die Tshape kunnen laten zien :D

  • Dala
  • Registratie: November 2000
  • Laatst online: 26-05 23:47
Delphi:
1
2
3
4
5
6
7
8
9
with Shape1 do
begin
  Pen.Color:=CLBLACK;
  Brush.Color:=CLRED;
  left := 0;
  Width := 50;
  top := 0;
  Height := 50;
end;


effe zo uit de kop..

zal wel werken gok ik. :)

effe geen delphi bij de hand

shape1.shape := stRectangle; (evt.)

[ Voor 9% gewijzigd door Dala op 05-12-2003 11:31 ]


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 21-05 09:01

klinz

weet van NIETS

Je kunt de windows api functie DrawAnimatedRects() gebruiken om het leven simpeler te maken.

[ Voor 18% gewijzigd door klinz op 05-12-2003 11:41 ]


  • Dala
  • Registratie: November 2000
  • Laatst online: 26-05 23:47
klinz schreef op 05 december 2003 @ 11:40:
Je kunt de windows api functie DrawAnimatedRects() gebruiken om het leven simpeler te maken.
http://www.swissdelphicenter.ch/torry/showcode.php?id=1419
http://msdn.microsoft.com...-us/gdi/pantdraw_6qnn.asp

is idd wel toffer ja :)
Pagina: 1