Autor Beitrag
andisun
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 61

Win 98, Win Xp
D5 Stan, D7 Ent
BeitragVerfasst: Mo 27.01.03 21:04 
Ich komme irgendwie nicht weiter, ich möchte gerne, dass wenn sich die Größe meines Formulars ändert, das darauf befindliche TImage samt seines Canvas die Größe entsprechend ändert...

Eigentlich ist das ja ganz einfach, ich habs auch so weit, das er die große vo Timage ändert, nur das Canvas ändert seine Größe nicht, siehe ClipRect...

Somit kann ich in den neu geschaffenen Raum ncith zeichnen, beim Start des Programms wird einmal Canvas.ClipRect festgelegt, doch wie verändert man es während es läuft???

Wenn ich direkt aufs Formular zeichne gehts es doch auch...
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 27.01.03 22:19 
Hi,

Ich verstehe nicht ganz was Du meinst. Aber wenn Du meinst dein Canvas wird dann gestreckt liegst Du falsch.

Du musst die Koordinaten deiner Canvas-Anweisungen ebenfalls entsprechend ändern. Es genügt nicht, dass Du nur das TImage vergrößerst.

MFG
______
Ernesto
andisun Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 61

Win 98, Win Xp
D5 Stan, D7 Ent
BeitragVerfasst: Di 28.01.03 15:17 
Dieser Code sollte ja eigentlich, das TImage vollständig füllen...
ausblenden Quelltext
1:
2:
3:
4:
  
  Bild.Canvas.Brush.Color := RGB( 255, 255, 255 );
  Flaeche := Bild.Canvas.ClipRect;
  Bild.Canvas.FillRect( Flaeche );

...tut er auch, aber nur in dem Bereich der angezeigt wird nach dem das Programm gestartet wurde. Das heisst, wenn ich das Formular vergrößere und dadurch das TImage ja auch größer wird, also die Komponente an sich, also Bild.Height und Bild.Width größer werden, hab ich geprüft...
Dann müsste die Zeichenfläche auch komplett gefüllt werden, also das Canvas, nur füllt er auch bei vergrößertem Canvas nur den Bereich Bild.Canvas.ClipRect, das ist ja auch logisch, den genau diese ändert sich komischer weise beim vergrößern nicht...
Man kann das Rect ja auch selbst festlegen:
ausblenden Quelltext
1:
2:
3:
  Bild.Canvas.Brush.Color := RGB( 255, 255, 255 );
  Flaeche := Rect( 0, 0, Bild.Width, Bild.Height );
  Bild.Canvas.FillRect( Flaeche );

doch auch das ändert nciths, alles was über die anfangsgröße hinausgeht, wird einfach abgeschnitten, so wie es in der beschreibung von ClipRect steht...
Auch ein manuelles ändern ist ncith möglich, da die Variable Schreibgeschützt ist.
Also müsste es doch eine Methode geben, die ClipRect ändert, also die Größe der Zeichenfläche ändern kann oder aktuallisiert, wenn man die größe des Formulars geändert hat.

Irgendwie weiss ich nicht so recht wie ich das Problem beschreiben soll, ich hoffe diesmal war es einigermaßen anschaulich erklärt.
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Di 28.01.03 16:00 
Hallo,

es ist immer Problematisch in den Canvas des Images direkt zu zeichnen. Nehme doch den Bitmap.Canvas. Diesen kannst Du dann auch individuell anpassen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure Form1.FormCreate(Sender: TObject);
begin
  ...
  with Image1 do
  begin
    Picture.Bitmap.Width:=Width;
    Picture.Bitmap.Height:=Height;
  end; // wíth
  ...


In der OnResitze des Forms fügst Du dann folgenden Code ein:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
// Annahme, dass das Image mit Align:=alClient auf der Form liegt.
procedure TForm1.FormResize(Sender: TObject);
begin
  with Image1 do
  begin
    Picture.Bitmap.Width:=Width;
    Picture.Bitmap.Height:=Height;
  end; // wíth
  Zeichne; // nach Größenänderung, neu zeichnen.
end;

procedure TForm1.Zeichne;
begin
  with Image1.Picture.Bitmap.Canvas do
  begin
    FillRect(ClipRect);
    ...
    ...
  end; // with
end; // TForm1.Zeichne

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 28.01.03 18:47 
Die Canvas ist immer so groß wie daß Bitmap ist. Du kannst also nicht die Canvas ändern, sondern mußt es mit der Bitmap machen. Die Hat wiederum ein Width und Height.

Um die Ganze Fläche eines Bildes auszufüllen ist das die korrekte Funktion:

ausblenden Quelltext
1:
Bild.Canvas.FillRect( Bild.Canvas.ClipRect );					


oder kurz:

ausblenden Quelltext
1:
with Bild.Canvas do FillRect( ClipRect );					


Wenn nicht soviel gefüllt wurde wie du willst, dann mußt du an den Werten der Bitmap ändern.
andisun Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 61

Win 98, Win Xp
D5 Stan, D7 Ent
BeitragVerfasst: Di 28.01.03 23:11 
Titel: Vielen Dank
Danke jetzt gehts, hab bei Form1.OnResize:

ausblenden Quelltext
1:
2:
3:
4:
5:
...
Begin 
  Bild.Picture.Bitmap.Height:=Bild.Height;
  Bild.Picture.Bitmap.Width:=Bild.Width;
End;


und nun läufts ohne probleme, war schon am verzweifeln... :lol: