Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pfeil-Up oder Down in Text (https://www.delphipraxis.net/132688-pfeil-up-oder-down-text.html)

neutrino 17. Apr 2009 14:39


Pfeil-Up oder Down in Text
 
Hi,
ich möchte in einem StringGrid durch Click auf die Headerrow sortieren. Dabei soll neben dem Cell-Inhalt ein Pfil Rauf bzw runter erscheinen. Wie bekomme ich diese Zeichen in den Text?
Danke und Bitte um entschuldigung, falls diese Frage schon ein paar 100 male gestellt wurde
mfg

taaktaak 17. Apr 2009 14:45

Re: Pfeil-Up oder Down in Text
 
Moin, Moin.
Typischerweise fügt man die nicht in den Text ein, sondern zeichnet im OnDrawCell() ein kleines Dreieck hinter den Text.

PS : Ein herzliches Willkommen in der DP!

neutrino 17. Apr 2009 14:58

Re: Pfeil-Up oder Down in Text
 
Danke schön! Und Danke für die Begrüßung.
Noch eine Frage: Wie mache ich die Dreiecke (ASCII - ANSI??)
mfg

taaktaak 17. Apr 2009 15:41

Re: Pfeil-Up oder Down in Text
 
Wir reden wohl noch ein wenig aneinander vorbei.
Wenn ich schreibe ".. zeichnet im OnDrawCell() ..", dann meine ich tatsächlich zeichnen, d.h. man ermittelt mit Canvas.TextWidth() die Länge des Textes in Pixeln und zeichnet (sofern die Spaltenbreite es zulässt) z.B. mit PolyLine() ein kleines Dreieck mit Schatteneffekt.

neutrino 17. Apr 2009 15:52

Re: Pfeil-Up oder Down in Text
 
Danke! hab schon gehofft, es gäbe eine ganz ganz einfache methode
mfg
neutrino

Ralf Kaiser 17. Apr 2009 15:58

Re: Pfeil-Up oder Down in Text
 
Das muss ja nicht unbedingt mittels einer "manuellen" Methode wie PolyLine() geschehen. Meiner Meinung nach ist es am einfachsten den Pfeil als fertige Grafik mit Canvas.Draw() an die richtige Stelle zu zeichnen. Die Grafik kannst du beispielsweise aus einer ImageList herausholen.

taaktaak 17. Apr 2009 16:09

Re: Pfeil-Up oder Down in Text
 
Hallo Ralf - mit f.
Das ist natürlich richtig, aber das Polyline() ist eigentlich nicht der besondere Aufwand. Normalerweise sortiert man ja mit Klick auf die oberste Zeile, da gilt es dann noch einiges mehr zu beachten. Außerdem, ich hatte es angedeutet, wenn die Spaltenbreite verändert wird, muss ggf. das Dreieck entfernt oder neu gezeichnet werden...

Ralf Kaiser 17. Apr 2009 17:35

Re: Pfeil-Up oder Down in Text
 
Hallo Ralph - mit ph. :)

Das ist schon richtig. Aber ich erstelle mir für solche Situationen meistens eine Methode der ich z.B. nur einen ImageIndex einer ImageList übergeben muss um das korrekte Symbol zu zeichnen. Auf diese Weise kann man nicht nur "Pfeil-Dreiecke" sondern eigentlich jedes beliebige Symbol als Statusanzeige im Spaltenkopf zeichnen.

So eine Routine, inklusive des Tests auf eine bestimmte Breite ist doch höchstens 10-15 Zeilen lang (je nach Formatierung)

Für "grössere" Programme verwende ich dann sowieso ein erweitertes Grid, wie z.B. TAdvStringGrid von TMS. Da sind solche Sachen, meistens ebenfalls mit ImageListen bereits fertig gekapselt. Allerdings lohnt sich für ein kleines Tool meistens ein solch "Riesen-Control" nicht, zumindest nicht wenn man nur eine Statusanzeige in den Header zeichnen will.

Ich wollte ja auch nicht sagen, dass deine Methode mit PolyLine() falsch sei, sie ist einfach nur anders. Viele Wege führen eben nach Rom zum Sortierpfeil.

taaktaak 17. Apr 2009 18:28

Re: Pfeil-Up oder Down in Text
 
Hallo Ralf - mit f,
so hatte ich dich auch verstanden.

Zitat:

Viele Wege führen eben nach Rom zum Sortierpfeil.
- guter Spruch!
:hi:

Hansa 17. Apr 2009 21:34

Re: Pfeil-Up oder Down in Text
 
Falls Image (= Datei), dann kann es sein, dass kein Pfeil da ist. => Fehlerquelle (vergessene Datei) um 3 Zeilen einzusparen.

Delphi-Quellcode:
with StringGrid1 do begin
  if not (ACol = SortColAusgew) then // wird im OnClick gesetzt.
    Canvas.Brush.Color := $00AB8552
  else
    Canvas.Brush.Color := clLime;
  Canvas.Pen.Color := clBlack;
  Canvas.Polygon([Point(Rect.Right-9,Rect.Top+9-6-3),
                 Point(Rect.Right-3,Rect.Top+15-6-3),
                 Point(Rect.Right-15,Rect.Top+15-6-3)]);
  Canvas.Polygon([Point(Rect.Right-3,Rect.Top+9),
                 Point(Rect.Right-15,Rect.Top+9),
                 Point(Rect.Right-9,Rect.Top+15)]);


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Seite 1 von 2  1 2      

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