Delphi-PRAXiS

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 wie vom Caret die Höhe erhalten oder Zeilen... (https://www.delphipraxis.net/9284-wie-vom-caret-die-hoehe-erhalten-oder-zeilen.html)

Snoop007 22. Sep 2003 22:52


wie vom Caret die Höhe erhalten oder Zeilen...
 
Hi,
wie kann ich die Höhe des Cares oder die Zeilenhöhe ( im RitchEdit ) erhalten ?

es geht mir nicht um die schriftgrösse !

Die Zeilenhöhe ändert sich Abhängig der Schrift -Art und -Grösse unterschiedlich.


Danke !!!!

Snoop007 23. Sep 2003 11:08

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
Antwort : canvas.TextHeigth('A')

danke :D ;)

edit : meine komponente hat ein canvas objekt, deswegen geht's

Quake 20. Apr 2004 12:29

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
Wie geht das aber bei dem standard TMemo, bei dem die Canvas Property nicht freigegeben ist. :gruebel:

Über
Code:
 Memo.Font.Height
bekommt man ja nur die Höhe der schrift und nicht den Abstand der Zeilen.

shmia 20. Apr 2004 12:31

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
Delphi-Quellcode:
function TrueFontHeight(fnt: TFont): integer;
// written by Udo Nesshoever, Jan 2001
var
   dc: hdc;
   tm: TTextMetric;
begin
   DC := GetDC(0);
   SelectObject(DC, fnt.Handle);
   GetTextMetrics(DC, tm);
   ReleaseDC(0, DC);
   Result:= tm.tmHeight;
end;

function TrueFontWidth(fnt: TFont; const text:string): Integer;
var
   dc: hdc;
   tsize : Windows.TSize;
begin
   dc := GetDC(0);
   SelectObject(DC, fnt.Handle);
   GetTextExtentPoint32(dc, PChar(text), Length(text), tsize);
   ReleaseDC(0, DC);
   Result := tsize.cx;
end;

himitsu 20. Apr 2004 12:38

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
@shmia
wenn du deinen Code auch noch dort Länge und Höhe eines Textes (String) eintragen würdest, dann hätten bestimmt noch mehr was davon :)

@Snoop007
die DP-Suchfuntion bringt dazu auch schon vieles ans Tageslicht und in der Cod-Lib ist auch massig zu finden

Quake 20. Apr 2004 12:39

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
Wow, die Antwort kam ja schnell. Danke :thuimb:

shmia 20. Apr 2004 12:54

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
Zitat:

Zitat von himitsu
@shmia
wenn du deinen Code auch noch dort Länge und Höhe eines Textes (String) eintragen würdest, dann hätten bestimmt noch mehr was davon :)

Würde ich gerne machen, habe aber keine (Schreib-)Rechte. :cry:
Also wo sind die Administrator-Helden, die dies übernehmen ? :dance:

Quake 20. Apr 2004 13:22

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
@ himitsu

Snoppy hat den Thead bestimmt schon vergessen. Siehe Datum.
Ich wollte nur keinen neuen Thread aufmachen. :zwinker:

himitsu 20. Apr 2004 13:28

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
da beim Memo die Schrift ja vom Memo fesgelegt wird:

einfach die Schrift (Memo1.Font) an eine unserer Prozeduren übergeben und du bekommst die Höhe.



wenn in dem RitchEdit die Schrift nicht geändert wird, dann geht es dort genauso (RitchEdit1.Font übergeben), sonnst geht es z.B. so (andere wird es bestimmt auch mal interessieren)

Delphi-Quellcode:
Function FontHeightAtPos(Pos: Integer): Integer;
  Var Font: TFont;

  Begin
    If Pos < Length(Form1.RichEdit1.Text) Then Begin
      Form1.RichEdit1.SelStart := Pos;
      Form1.RichEdit1.SelLength := 1;
      Font := Form1.RichEdit1.Font;
      Font.Charset := Form1.RichEdit1.SelAttributes.Charset;
      Font.Name := Form1.RichEdit1.SelAttributes.Name;
      Font.Pitch := Form1.RichEdit1.SelAttributes.Pitch;
      Font.Size := Form1.RichEdit1.SelAttributes.Size;
      Font.Style := Form1.RichEdit1.SelAttributes.Style;
      // such dir eine der Prozeduren von Shmia, oder mir aus
      Result := TrueFontHeight(Font);
      // oder die
      Result := TextHoehe(Font, 'Xg');
    End Else
      Result := -1;
  End;
Delphi-Quellcode:
h := FontHeightAtPos(12);
// für 12 einfach die Position des Zeichens angeben, von welchem die Höhe benötigt wird

Und wenn die Komponente, von der man die Texthöhe haben möchte ein Canvas hat, dann ist es auch möglich Canvas.TextHeight dieser Komponente zu verwenden.

w3seek 20. Apr 2004 17:33

Re: wie vom Caret die Höhe erhalten oder Zeilen...
 
Zitat:

Zitat von Snoop007
Hi,
wie kann ich die Höhe des Cares oder die Zeilenhöhe ( im RitchEdit ) erhalten ?

Ein Thread kann in windows nur einen Caret zur selben zeit haben. An die Informationen ob und wo am bildschirm ein caret eines Fensters eines Threads blinkt, kommst du via GetGUIThreadInfo(). Du bekommst das Fenster-Handle des windows, welchen den Caret enthaelt und die Koordinaten (inkl. Groesse) relativ zu dessen Client-Area. Siehe PSDK


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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