![]() |
Image so gross machen das ein String genau reinpasst.
Hai,
ich möchte ein Image (TImage) erzeugen das genau die Breite eines Strings hat den ich darauf zeichnen möchte. Auf meiner Form sind: 1 Button 1 Edit 1 Image
Delphi-Quellcode:
Aber die Breite des Images wird nicht angepasst :-(
procedure TForm1.BitBtn1Click(Sender: TObject);
var MyRect : TRect; begin Image1.Canvas.Font.Size := 10; MyRect.Left := 0; MyRect.Top := 0; MyRect.Right := Image1.Canvas.TextWidth(Edit1.Text) + 5; MyRect.Bottom := Image1.Canvas.TextHeight(Edit1.Text) + 2; Image1.BoundsRect := MyRect; Image1.Canvas.TextOut(0, 0, Edit1.Text); Label1.Caption := Format('Das Image ist %d Pixel breit', [Image1.width]); end; Hat jemand eine Idee? |
Hallo Sharky,
ich habe zwar keine Ahnung, wofür das Gut sein soll, aber ich habe es trotzdem ausprobiert. Wenn Du dafür sorgst, daß die Schrift in beiden Objekten identisch ist, sollte es funktionieren. mfg eddy |
Entscheidend für den Inhalt ist auch die Größe des Bitmap.
Image1.Bitmap.Width und Image1.Bitmap.Height. Die Größe des Images wird nur zur Darstellung, nicht aber für den Canvas genutzt. Kurz: Beide Image1 und Image1.Bitmap müssen die richtige Größe haben. ...:cat:... |
Moin sakura,
hättest Du in diesem Zusammenhang eine Idee, warum bei Canvas.ClipRect so beschrieben ist: Zitat:
|
Erst mal sorry. Es ist nicht Image.Bitmap sondern Image.Picture.Bitmap.
@C/S: Welches ClipRect meinst Du? |
Zitat:
@eddy: Das ganze ist für folgendes Gut: Ich beim dem Instrumentation Workshop von ![]() Da ich dort Text anzeigen möchte muss ich halt ein Bitmap mit Text erzeugen. Anbei habe ich mal ein ganz kleines Demo gehängt |
Hallo Sharky,
Du Schreibst: Anbei habe ich mal ein ganz kleines Demo gehängt Wo ist anbei und wie komme ich da ran? Ich bin noch nicht allzu lange dabei, fehlt mir noch irgendeine Freigabe? mfg eddy |
Direkt unterhalb der Signatur von Sharky
Zitat:
Zitat:
|
Hi Sharky,
ist schon manchmal seltsam. Bevor ich die vorige Nachricht sandte, stand noch nichts von Banner.exe unter Deinem Text, nach dem Versenden bin ich wieder auf die Seite gegangen, da stand der Download bereit. Hab ihn mir angesehen. Läuft prima. Jetzt fehlt nur noch ein Regler zum Einstellen der Farben. mfg eddy |
Zitat:
...:cat:... |
Zitat:
![]() |
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 ;-)) |
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
...:cat:...
...
Canvas.Handle := GetDC(0); try Canvas.SetClipRect(0,0,45,300); // was für eine Bildschirmauflösung das jetzt wär... ... |
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] |
Hallo Christian,
Zitat:
Delphi-Quellcode:
Grüsse, Daniel :hi:
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; |
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 10:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz