Delphi-PRAXiS

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)]);

oki 17. Apr 2009 21:41

Re: Pfeil-Up oder Down in Text
 
Zitat:

Zitat von Hansa
Falls Image (= Datei), dann kann es sein, dass kein Pfeil da ist. => Fehlerquelle (vergessene Datei) um 3 Zeilen einzusparen.

Aber nur, wenn er sich das Image nicht aus einer ImageList sonder als Datei von der Platte holt.

Zitat:

Zitat von Alfi001
Die Grafik kannst du beispielsweise aus einer ImageList herausholen.

Gruß oki

Ralf Kaiser 17. Apr 2009 21:43

Re: Pfeil-Up oder Down in Text
 
Zitat:

Zitat von Hansa
Falls Image (= Datei), dann kann es sein, dass kein Pfeil da ist. => Fehlerquelle (vergessene Datei) um 3 Zeilen einzusparen.

Darum nehme ich für sowas dann eine ImageList. Die ist im Programm enthalten :wink:

Man kann dann einfach die Grafik mit ImageList.GetBitmap() auslesen und mit Canvas.Draw an die richtige Stelle malen.

sx2008 17. Apr 2009 22:48

Re: Pfeil-Up oder Down in Text
 
Man kann natürlich auch den Font Webdings (oder Wingdings, Wingdings2,Wingdings3) verwenden und dort einfach die Pfeile raussuchen.

Meistens denkt man ja als Programmierer gar nicht so um die Ecke, aber in diesen Symbolfonts stecken viele nützliche Zeichen, die man mit wenig Aufwand verwenden kann.

Um OnDrawCell() kommt man nicht herum, weil man für Überschrifttext und Pfeilsymbol versch. Fonts benötgt.
Zusatzbonus ist allerdings, dass die Pfeile autom. mit der Fontgrösse scalieren.

Hawkeye219 17. Apr 2009 23:51

Re: Pfeil-Up oder Down in Text
 
Hallo,

eine kleine Anregung:

Delphi-Quellcode:
Canvas.Pen.Color := clDkGray;
GraphUtil.DrawArrow (Canvas, sdDown, Point(50, 50), 4);
Gruß Hawkeye

_frank_ 18. Apr 2009 14:57

Re: Pfeil-Up oder Down in Text
 
Zitat:

Zitat von sx2008
Man kann natürlich auch den Font Webdings (oder Wingdings, Wingdings2,Wingdings3) verwenden und dort einfach die Pfeile raussuchen.

wenn dann Marlett (0x74,0x75), das nimmt windows imho auch für seine symbole...

es gab auch mal irgendeine Api-Routine, die solche Windows-Symbole malen konnte...weis aber nicht mehr, wie die hies.

Gruß Frank

uligerhardt 15. Jan 2010 12:17

Re: Pfeil-Up oder Down in Text
 
Zitat:

Zitat von _frank_
es gab auch mal irgendeine Api-Routine, die solche Windows-Symbole malen konnte...weis aber nicht mehr, wie die hies.

Meinst du "Stock-Bitmaps"?
Delphi-Quellcode:
LoadBitmap(0, PChar(OBM_CLOSE));

Der.Kaktus 15. Jan 2010 12:53

Re: Pfeil-Up oder Down in Text
 
Hi,
es gab mal von ElDos(spaeter uebernommen von LMD..ELPack)..ELTree..diese Komponente konnte das prima. schoene Pfeile in Sortrichtung...Vielleicht findest Du noch die Freeversion im Netz.


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