![]() |
eingabe- oder buchstabenbreite herrausfinden
hi,
es geht sich um folgendes: ich muss ein programm schreiben, welches die proteinbiosynthese simuliert und veranschaulicht, was das genau ist, ist irrelvant. der benutzer gibt also eine eingabe (DNA) ein, diese soll dann mit einer datei verglichen werden und zwei ausgaben (mRNA und Aminosäure) erfolgen. allerdings möchte ich noch ein paar grafische extras einbauen: die eingabe wird in ein Panel geschrieben und über dieses panel läuft ein gelber kreis. da die eingabe vom programm in 'päckchen' a 3 buchstaben verpackt werden muss, hätte ich gerne, dass wenn der kreis über das erste päckchen (DNA) gelaufen ist, das erste päckchen der mRNA ausgegeben wird. hierzu ist es nötig, entweder a) zu wissen, wie breit jeder buchstabe (ich benutze courier) oder b) wie breit die gesammte eingabe ist, und das bekomme ich einfach nicht raus :wall:. gibt es dafür eine funktion in delphi oder kann mir jemand sagen, wie breit ein buchstabe in delphi in courier ist? für antworten wäre ich sehr dankbar, mfg, teetasse |
Re: eingabe- oder buchstabenbreite herrausfinden
Am bequemsten geht das wohl über die DrawText-Funktion aus der Unit Windows. Die kennt einen Parameter namens DC_CALCRECT der die Abmessungen des Textes in einem als Parameter übergebenen TRect zurückliefert. Zusätzlich kann man noch eine Reihe weiterer Parameter angeben, schau einfach mal in die Doku dazu.
|
Re: eingabe- oder buchstabenbreite herrausfinden
Alternativ fällt mir dazu ein: Du kannst von deinem Form das "Canvas" und dann dessen Methode "TextWidth" benutzen, um das rauszufinden.
Also z.B.:
Delphi-Quellcode:
Ungetestet, aber ich bin optimistisch... ;)
procedure TForm1.MachIrgendwas;
var oldFont: TFont; myWidth: integer; begin // die bisherige Schrift sichern, um nix kaputt zu machen... oldFont:=canvas.Font; // Die richtige Schrift, die gemessen werden soll... canvas.Font.Name:='Courier'; canvas.Font.Size:=12; // Ausmessen... myWidth:=Canvas.TextWidth('Hiervon will ich die Breite...'); // Schrift zurücksetzen... Canvas.Font:=oldFont; // Und hier mach ich dann mit der Erkenntnis von myWidth irgendwas... [...] end; Bis denn Bommel |
Re: eingabe- oder buchstabenbreite herrausfinden
Nachtrag: Hab übersehen, dass TFont ja nicht kopiert wird. Damit das klappt, müsstest du dir also Font.Name und Font.Size in jeweils eine eigene Variable sichern, bei meinem Beispiel entsteht nur ein Zeiger auf das TFont-Objekt.
|
Re: eingabe- oder buchstabenbreite herrausfinden
oder siehe auch
![]() |
Re: eingabe- oder buchstabenbreite herrausfinden
Funktioniert TextWidth eigentlich auch mit Widestrings? Ich habe nämlich genau wegen dieser Problematik damals die Methode mit DrawText bzw. DrawTextW implementiert (allerdings ohne damals TextWidth bewusst ignoriert zu haben)...
|
Re: eingabe- oder buchstabenbreite herrausfinden
Nein, wenn ich mich recht entsinne, funktionierte das vor D2009 nicht mit Widestrings, da hast du recht. In meiner Vor-D2009-Zeit hatte ich deswegen auch extra WideTextWidth (ich glaube, so hieß das) aus den TNT-Komponenten benutzen müssen. Jetzt in D2009 funktioniert es dann natürlich schon.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 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