Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi eingabe- oder buchstabenbreite herrausfinden (https://www.delphipraxis.net/134296-eingabe-oder-buchstabenbreite-herrausfinden.html)

teetasse 19. Mai 2009 13:31


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

OldGrumpy 19. Mai 2009 13:37

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.

Bbommel 19. Mai 2009 13:40

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:
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;
Ungetestet, aber ich bin optimistisch... ;)

Bis denn
Bommel

Bbommel 19. Mai 2009 13:47

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.

himitsu 19. Mai 2009 13:51

Re: eingabe- oder buchstabenbreite herrausfinden
 
oder siehe auch TextWidthTextWidth

OldGrumpy 20. Mai 2009 21:47

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)...

Bbommel 21. Mai 2009 06:57

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 01:22 Uhr.

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