Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Image so gross machen das ein String genau reinpasst. (https://www.delphipraxis.net/2155-image-so-gross-machen-das-ein-string-genau-reinpasst.html)

Sharky 10. Jan 2003 12:17

Zitat:

Zitat von eddy
Hab ihn mir angesehen. Läuft prima. Jetzt fehlt nur noch ein Regler zum Einstellen der Farben.

Ich habe hier mal eine neue Version des Demos abgelegt.

Christian Seehase 10. Jan 2003 13:36

Moin sakura,

also in D5 ist unter TCanvas die Eigenschaft ClipRect beschrieben (dto. TControlCanvas).
Nachdem ich die gelesen hatte dachte ich:

*freu* daran wird's liegen.

Pustekuchen... Read Only. :shock:

Das wird dann durch die Grösse der Bitmap eingestellt, aber darauf muss man erst mal kommen ;-)

Selbst mein "schmutziger Trick", wie beim Austausch eines Formulares (falls Du Dich erinnerst) lässt sich hier leider nicht anwenden, da ClipRect wohl über GetClipRect ausgelesen wird (ich hab's jetzt nicht extra nachgeschaut).

Warum dann kein SetClipRect implementiert wurde, dass die Bitmap entsprechend einstellt wird wohl ewig das Geheimnis von Borland bleiben.
(oder ich hab' mir die verschiedenen Eigenschaften nicht richtig angesehen ;-))

sakura 10. Jan 2003 13:54

Zitat:

Zitat von Christian Seehase
also in D5 ist unter TCanvas die Eigenschaft ClipRect beschrieben

Achso.
Zitat:

Zitat von Christian Seehase
Das wird dann durch die Grösse der Bitmap eingestellt, aber darauf muss man erst mal kommen

Schon recht viel Canvas-Graphik-Programmierung betrieben.
Zitat:

Zitat von Christian Seehase
Warum dann kein SetClipRect implementiert wurde, dass die Bitmap entsprechend einstellt wird wohl ewig das Geheimnis von Borland bleiben.

Nicht unbedingt. Da der (Control)Canvas ja nicht nur für Bitmaps sondern halt auch für Paintboxen, Labels und andere Controls da ist, kann der/die/das Canvas auch nicht direkt in seiner Größe verändert werden. Letzlich ist der Canvas auch nur ein weiteres Handle in der Control. Windows weiss anhand der Zuweisung des Canvas-Handels zu welcher Control dieses geöhrt und kann dann entsprechend "malen". In diese Richtung kann Windows auch die verfügbare Fläche ermitteln. Wenn man das weiss, dann ist die Schlußfolgerung für das "wie erhalte ich mehr Platz auf meinem Canvas" recht einfach. Stell Dir mal vor, das gänge anders herum.
Delphi-Quellcode:
...
Canvas.Handle := GetDC(0);
try
  Canvas.SetClipRect(0,0,45,300); // was für eine Bildschirmauflösung das jetzt wär...
...
...:cat:...

Christian Seehase 10. Jan 2003 14:25

Moin sakura,

danke für die Erklärung.
Bisher hab' ich noch nie mit Canvas direkt gearbeitet.

Allerdings wäre es vielleicht nicht so ganz sinnlos, wenn bei Komponenten wie TImage direkt ein ClipRect angegeben (und eben nicht für die Canvas) und eingestellt werden könnte. Das Setzen einer solchen Eigenschaft könnte dann auch solche von Dir genannten "Gemeinheiten" unterbinden.

BTW:
Auch wenn's komisch klingt scheint die Canvas wohl richtig zu sein.
Es steht ja schliesslich für Leinwand bzw. Zeichenfläche.

[EDIT]
und wie ist ClipRect in der englischen Hilfe beschrieben?
[/EDIT]

Daniel B 10. Jan 2003 14:30

Hallo Christian,

Zitat:

Specifies the boundaries of the clipping rectangle.

property ClipRect: TRect;

Description

Use ClipRect to determine where the canvas needs painting. ClipRect limits the drawing region of the canvas so that any drawing that occurs at coordinates outside the ClipRect is clipped and doesn’t appear in the image.

When handling a form’s OnPaint event, the canvas' ClipRect property is set to the rectangle that needs to be painted. Portions of the image that do not overlap the ClipRect do not need to be drawn. Thus, OnPaint routines can use the value of ClipRect to optimize painting, speeding the overall performance of the application.
Beispiel:

Delphi-Quellcode:
This example creates a region and selects this region as the clipping rectangle for the Image component's canvas. It then sets the canvas's brush color to red and calls FillRect using the ClipRect as the area to fill. Lastly, the ClipRect is reset to the original value that it contained by calling SelectClipRect with nil as the second parameter and deletes the region.

procedure Form1.Button1Click(Sender: TObject);
var

    MyRgn: HRGN ;

begin

    MyRgn := CreateRectRgn(100,100,200,200);
    SelectClipRgn(Image1.Canvas.Handle,MyRgn);
    Image1.Canvas.Brush.Color := clRed;
    Image1.Canvas.FillRect(Image1.Canvas.ClipRect);
    Image1.Invalidate;
    SelectClipRgn(Image1.Canvas.Handle,nil);
    DeleteObject(MyRgn);

end;
Grüsse, Daniel :hi:

Christian Seehase 10. Jan 2003 14:37

Moin Daniel B,

danke, dann war da mal wieder jemand an der Übersetzung, der sich mit englisch etwas schwer tut und/oder der sich mit der Materie nicht auskennt.
Und Korrekturlesen von jemandem der sich auskennt hat wohl auch nicht stattgefunden. :?
Typisch ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz