AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String mit ... abkürzen

Ein Thema von Yheeky · begonnen am 1. Aug 2002 · letzter Beitrag vom 24. Mär 2008
Antwort Antwort
Seite 2 von 3     12 3      
Nuclear-Ping
(Gast)

n/a Beiträge
 
#11

Re: String mit ... abkürzen

  Alt 20. Mär 2008, 15:21
Hallo marabu,

ich denke du hast den Code getestet, sonst würdest du ihn sicher nicht hier reinstellen. Wahrscheinlich funktioniert er auch bei dir so, wie er soll.

Aber wie oben im 1. Edit angemerkt, kürzt er mir den String zwar auch, allerdings viel zu weit hinten, obwohl das Rect genau passt, wenn ich es mir mit FListView.Canvas.DrawFocusRect (Rect) anzeigen lasse.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

Re: String mit ... abkürzen

  Alt 20. Mär 2008, 15:29
Kannst du mein Beispiel (Text und Rect) so anpassen, dass ich dein Problem erkenne?
  Mit Zitat antworten Zitat
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#13

Re: String mit ... abkürzen

  Alt 20. Mär 2008, 15:55
Wäre MinimizeName() nicht eine Alternative?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: String mit ... abkürzen

  Alt 20. Mär 2008, 16:28
Eher nein - MinimizeName() arbeitet auf (einzeiligen) Pfadnamen. Ich glaube, hier geht es allgemein um Texte.
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#15

Re: String mit ... abkürzen

  Alt 21. Mär 2008, 10:31
Zitat von marabu:
Kannst du mein Beispiel (Text und Rect) so anpassen, dass ich dein Problem erkenne?
Hi marabu,

erstelle dir ein neues Projekt. Auf die Form packst du eine TListView und eine TImageList. Die ImageList setzt du auf Width 2 und Height 100. Den TListView auf vsReport, zwei Spalten. Spalte 1 Breite 32, Spalte 2 100. Die ImageList weißt du der SmallImages-Property der ListView zu.
Delphi-Quellcode:
unit LView_DrawText_TestU;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, ComCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    ImageList1: TImageList;
    procedure ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure ListView1CustomDrawSubItem(Sender: TCustomListView;
      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
      var DefaultDraw: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    TestStr: String;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses
  StrUtils;

{$R *.dfm}

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  //
end;

procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
  Rect: TRect;
  a, w: Integer;
begin
  DefaultDraw := FALSE;

  w := 0;
  for a := 0 to SubItem - 1 do
    w := w + ListView1.Columns[a].Width;

  Rect.Left := (Item.Left - 4 + w) + 2;
  Rect.Top := Item.Top + 2;
  Rect.Right := Rect.Left + ListView1.Columns[SubItem].Width - 2;
  Rect.Bottom := Item.Top + ListView1.SmallImages.Height - 2;

  ListView1.Font.Style := [];

// ListView1.Canvas.DrawFocusRect(Rect);
  case SubItem of
    1: begin
         ListView1.Canvas.FillRect (Rect);
         DrawText (ListView1.Canvas.Handle, PChar (TestStr), Length (TestStr),
                   Rect, DT_WORDBREAK or
                         DT_NOPREFIX or
                         DT_WORD_ELLIPSIS);
       end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  li: TListItem;
  a: Integer;
begin
  TestStr := DupeString('Der Affe den Sie meinen heißt Parmesan ', 5);
  for a := 1 to 10 do
    begin
      li := ListView1.Items.Add; // Leak erstmal egal
      li.Caption := inttostr (a);
    end;
end;

end.
In dem Beispiel funktioniert DT_WORD_ELLIPSIS nicht. Er schneidet den Text nicht ab.
DT_END_ELLIPSIS hat hier allerdings funktioniert. Aber im richtigen Projekt gabs da auch Probleme.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#16

Re: String mit ... abkürzen

  Alt 21. Mär 2008, 13:18
Hallo,

was soll ich dazu noch schreiben? DT_WORD_ELLIPSIS ist nicht das, was du willst, verhält sich aber aus meiner Sicht erwartungsgemäß. DT_END_ELLIPSIS entspricht genau deinen Wünschen, aber der von dir früher beobachtete Fehler lässt sich mit deinem Beispiel nicht reproduzieren. Ich betrachte dieses Problem solange als gelöst, bis du eine Reproduktionsmöglichkeit gefunden hast und den Thread wieder aufnimmst.

Freundliche Grüße
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#17

Re: String mit ... abkürzen

  Alt 21. Mär 2008, 16:58
Laut MSDN ist DT_WORDELLIPSIS schon das, was ich will, vorrausgesetzt ich verstehe das richtig: "Truncates any word that does not fit in the rectangle and adds ellipses." -> Er schneidet das ganze Wort weg, was nicht in das Rect passt und fügt "..." an. Und das funktioniert in dem Beispiel nicht erwartungsgemäß.

DT_END_ELLIPSIS schneidet dahingegen einfach ab, egal ob mitten im Wort oder nicht und hängt die "..." an. Und das ist nicht das, was ich will.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: String mit ... abkürzen

  Alt 21. Mär 2008, 20:45
Hallo Mario,

vielleicht muss ich doch etwas mehr schreiben. Betrachten wir zwei Beispieltexte:

Delphi-Quellcode:
Text1 := 'Gallia est omnis divisa in partes tres, '
       + 'quarum unam incolunt Belgae, aliam Aquitani, '
       + 'tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.';
Text2 := 'Alles hat ein Ende'#13#10'nur die Wurst hat zwei';
Man beachte: Text2 enthält einen harten Zeilenumbruch. Ich brauche diese zwei Texte, denn DT_WORD_ELLIPSIS betrachtet Zeilenenden, DT_END_ELLIPSIS betrachtet das Textende. Ich habe dein Beispielprogramm leicht verändert, so dass alle mir wichtigen Szenarien behandelt werden.

Item 1 und 2 (DT_WORD_ELLIPSIS)
Jede Zeile erhält eine Ellipsis.

Item 3 und 4 (DT_WORD_ELLIPSIS or DT_WORDBREAK)
Durch den weichen Zeilenumbruch entfällt eine Ellipsis am physischen Zeilenende.

Item 5 und 6 (DT_END_ELLIPSIS)
Eine Ellipsis gibt es nur am Textende, nicht am Zeilenende.

Item 7 und 8 (DT_END_ELLIPSIS or DT_WORDBREAK)
Eine Ellipsis am Textende wird auch durch einen automatischen Umbruch nicht verhindert.

So lieber Mario, nun musst du dich entscheiden...

Freundliche Grüße
Angehängte Dateien
Dateityp: zip lv-ellipsis_364.zip (2,4 KB, 23x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#19

Re: String mit ... abkürzen

  Alt 21. Mär 2008, 20:52
[OT] "De Bello Gallico" von Gaius Julius Caesar... ich bin einigermaßen angemessen beeindruckt [/OT]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#20

Re: String mit ... abkürzen

  Alt 22. Mär 2008, 06:44
[OT] Sapienti sat. [/OT]
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 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