Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Text zur Anzeige kürzen mit Punkten hinten (https://www.delphipraxis.net/164086-text-zur-anzeige-kuerzen-mit-punkten-hinten.html)

himitsu 30. Okt 2011 10:20

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Ist dir schonmal aufgefallen, daß Delphi-Referenz durchsuchenTCanvas.TextRect für den Text einen Var-Parameter nutzt?

Tipp:

tfModifyString, tfEndEllipsis oder tfPathEllipsis und tfCalcRect > Delphi-Referenz durchsuchenTTextFormat

oder DT_MODIFYSTRING, DT_END_ELLIPSIS oder DT_PATH_ELLIPSIS und DT_CALCRECT > MSDN-Library durchsuchenDrawTextEx
Delphi-Quellcode:
Text := DeinText;
Rect.Left := 1;
Rect.Top := 1;
Rect.Right := MaximaleBreite;
Rect.Bottom := MaximaleHöhe;
DrawTextEx(Handle, PChar(Text), Length(Text), Rect, ... or DT_END_ELLIPSIS or DT_MODIFYSTRING, nil);
SetLength(Text, StrLen(PChar(Text)));

siehe MSDN: DT_CALCRECT > but does not draw the text

Luckie 30. Okt 2011 10:33

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Geht doch:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
var
  Txt: String;
  Rct: TRect;
begin
  Txt := 'Dies ist ein Beispiel-Text.';
  GetWindowRect(Self.Handle, Rct);
  DrawText(Self.Canvas.Handle, PChar(Txt), Length(Txt), Rct, DT_SINGLELINE or DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS);
end;
Mein Panel (D7) hat übrigens kein Canvas.

DeddyH 30. Okt 2011 10:37

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Zitat:

Zitat von Luckie (Beitrag 1133530)
Mein Panel (D7) hat übrigens kein Canvas.

Wetten, dass doch? Allerdings ist das protected, Du brauchst also eine Cracker-Klasse, um da ranzukommen.

Bummi 30. Okt 2011 10:39

AW: Text zur Anzeige kürzen mit Punkte hinten
 
das kennst Du schon, oder?
Delphi-Quellcode:
type
  TPanel = Class(ExtCtrls.TPanel)
    Public Property Canvas;
  End;
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure Panel1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Panel1Click(Sender: TObject);
begin
  Panel1.Canvas.Rectangle(1,1,100,100);
end;

Luckie 30. Okt 2011 10:40

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Ja, natürlich hat es einen. Aber ich meinte ein Canvas dem man so nutzen kann.

JamesTKirk 30. Okt 2011 10:53

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Zitat:

Zitat von himitsu (Beitrag 1133527)
Ist dir schonmal aufgefallen, daß Delphi-Referenz durchsuchenTCanvas.TextRect für den Text einen Var-Parameter nutzt?

Tipp:

tfModifyString, tfEndEllipsis oder tfPathEllipsis und tfCalcRect > Delphi-Referenz durchsuchenTTextFormat

Zitat aus dem TCanvas der LCL:

Delphi-Quellcode:
procedure TextRect(const ARect: TRect; X, Y: integer; const Text: string);
procedure TextRect(ARect: TRect; X, Y: integer; const Text: string;
                    const Style: TTextStyle); virtual;
Diese unterstützt das nicht.

Gruß,
Sven

himitsu 30. Okt 2011 11:31

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Ich dachte die Lazarusleute hätten am Anfang erstmal alles kopiert? :stupid:

Wollte schon Fragen, wie TTextStyle dort aussieht, aber das hat sich grade erledigt.
Da hat man sich mit einem IMHO etwas umständlichen Record begnügt. (Das SET wurde wohl erst später erfunden?)
Wäre ja zu witzig gewesen, wenn dort tfModifyString und Co. mit enthalten wäre. :roll:




http://www.delphipraxis.net/164139-t...-ellipsis.html
Nja, die letzte Variante, also die mit dem Handle (HDC), sollte dann wohl auch unter Lazarus laufen. (hoff ich einfach mal, und wenn nicht, dann müßt ihr's halt noch etwas anpassen)

Furtbichler 30. Okt 2011 11:52

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Mein Delphi hat ein TControlCanvas. Das instantiiert man, verbindet es mit einem Control und -wupps- kann man auf dem Control zeichnen.

Guido Eisenbeis 30. Okt 2011 18:40

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Zitat:

Zitat von Furtbichler (Beitrag 1133552)
Mein Delphi hat ein TControlCanvas. Das instantiiert man, verbindet es mit einem Control und -wupps- kann man auf dem Control zeichnen.

Kannst du mir das Package umschreiben für Lazarus? :wink:

Ansonsten:

Was ist da nur so interessant an DrawText? Mein oben genannter 5-Zeiler erledigt das doch gut:

+ Anwendbar auf die Caption-Eigenschaft
+ gibt eine String zurück
+ evtl. Plattformunabhängig ???
- Abhängigkeit von Caption (bzw Text)
+ keine Abhängigkeit von Canvas
+ kein Publizieren des Canvas (für jede Control-Klasse!)
+ kein Überschreiben von Paint (für jede Control-Klasse!)


Zitat:

Zitat von Luckie (Beitrag 1133530)
Geht doch:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
var
  Txt: String;
  Rct: TRect;
begin
  Txt := 'Dies ist ein Beispiel-Text.';
  GetWindowRect(Form1.Handle, Rct);
  DrawText(Form1.Canvas.Handle, PChar(Txt), Length(Txt), Rct, DT_SINGLELINE or DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS);
end;

Bei mir nicht. :( Ist nichts zu sehen weder in Delphi, noch in Lazarus. Liegt an den von Stahli genannten Gründen, denke ich.


Guido.

Luckie 30. Okt 2011 18:43

AW: Text zur Anzeige kürzen mit Punkte hinten
 
Zitat:

Zitat von Guido Eisenbeis (Beitrag 1133583)
Zitat:

Zitat von Luckie (Beitrag 1133530)
Geht doch:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
var
  Txt: String;
  Rct: TRect;
begin
  Txt := 'Dies ist ein Beispiel-Text.';
  GetWindowRect(Form1.Handle, Rct);
  DrawText(Form1.Canvas.Handle, PChar(Txt), Length(Txt), Rct, DT_SINGLELINE or DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS);
end;

Bei mir nicht. :( Ist nichts zu sehen weder in Delphi, noch in Lazarus. Liegt an den von Stahli genannten Gründen, denke ich.

Guck mal genau hin. Ich gebe den Text nicht auf einem Panel aus, sondern auf der Form selber, wo du aber auch gesagt hast, das würde nicht funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.
Seite 2 von 4     12 34      

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