Delphi-PRAXiS
Seite 1 von 2  1 2      

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 mehrzeilige Zellen im Stringgrid (https://www.delphipraxis.net/55677-mehrzeilige-zellen-im-stringgrid.html)

w-lan 25. Okt 2005 10:32


mehrzeilige Zellen im Stringgrid
 
Hallo!
Gibt es eine Möglichkeit mehrzeilige Zellen in einem Stringgrid zu erzeugen?

Gruß

Michael

marabu 25. Okt 2005 11:04

Re: mehrzeilige Zellen im Stringgrid
 
Hallo.

Diese Möglichkeit gibt es. Du musst die property DefaultDraw auf FALSE setzen und einen event Handler für OnDrawCell() schreiben. Außerdem musst du in RowHeights[] die benötigten Abmessungen für die jeweilige Row in Abhängigkeit von der Zelle mit dem größten Höhenbedarf eintragen.

Grüße vom marabu

Surrounder 25. Okt 2005 11:39

Re: mehrzeilige Zellen im Stringgrid
 
Oder ein anderen StringGrid verwenden, ich wäre mal wieder beim AdvStringGrid von TMS, da kann man Multilinecells ein und aus schalten.

sunshine270882 22. Feb 2006 22:13

Re: mehrzeilige Zellen im Stringgrid
 
Hallo :)

Ich versuche gerade ebenfalls diese Zeilenumbrüche im Drawgrid/Stringgrid zu realisieren.
Der Zeilenumbruch selber klappt auch schon, aber das Anpassen der Zellenhoehe leider noch nicht :(

Zitat:

Zitat von marabu
Diese Möglichkeit gibt es. Du musst die property DefaultDraw auf FALSE setzen und einen event Handler für OnDrawCell() schreiben. Außerdem musst du in RowHeights[] die benötigten Abmessungen für die jeweilige Row in Abhängigkeit von der Zelle mit dem größten Höhenbedarf eintragen.

Bei mir schaut das jetzt so aus:
Delphi-Quellcode:
...
// in Zeile steht der erste String, den ich ins Grid eintrage
// mit Abstand ermittle ich Texthöhe
Abstand := Abstand + dg_woche.Canvas.TextHeight(Zeile)+1;
...
// in ZellenHoehe steht dann der Abstand + die Texthöhe meines zweiten Strings 'Ausgabe'
ZellenHoehe := Abstand + dg_woche.Canvas.TextHeight(Ausgabe);
...
if (ZellenHoehe < 1) then
  ZellenHoehe := 5;
dg_woche.RowHeights[ARow] := ZellenHoehe;
Beim Ausführen tritt leider das Problem einer Endlosschleife auf, so nach dem Motto: 'jedesmal wenn man die RowHeights setzt -> muss neu gezeichnet werden -> und dann setzt man sie...'

Hat da vllt jemand eine Idee, wie man das Problem lösen kann?

Freu mich auf Antworten :)

Liebe Grüße, sunny

Hansa 23. Feb 2006 00:07

Re: mehrzeilige Zellen im Stringgrid
 
Tja, die Zeilenhöhe zu verändern ist die eine Sache. Aber das sieht etwas seltsam aus. Wie wäre es denn,bei Bedarf eine neue Zeile einzufügen und das Stringgrid ansonsten in Ruhe zu lassen ? Desweiteren hat meine Glaskugel gesagt, daß über den genauen Einsatzzweck noch nichts gesagt wurde. 8)

sunshine270882 23. Feb 2006 00:50

Re: mehrzeilige Zellen im Stringgrid
 
Hi Hansa :)

Zum Verwendungszweck:
Ich möchte gerne einen Terminkalender programmieren mit verschiedenen Übersichten für Tag, Woche, Monat und Jahr.
Für die Darstellung der Übersichten habe ich Drawgrids.
Bei der Wochenübersicht zum Beispiel habe ich in der ersten Spalte die Zeitspannen im 1-Std-Takt stehen und in den anderen Spalten die Wochentage als Überschrift.
Da das ganze ein Mehrbenutzer-Terminkalender wird, hat jeder Benutzer seine eigene Farbe, in der die Termine in das Grid eingetragen werden.
Es können natürlich auch gleichzeitig mehrere Termine sein und die muss ich ja auch vernünftig darstellen...
Deswegen der Zeilenumbruch.
http://stud.fh-wedel.de/~mi5718/Wochenuebersicht.JPG
Mein Wochenübersicht-Formular

Fände es unschön, da Zeilen einzufügen, zumal dann mein Suchkriterium Zeitspanne [<- was in ARow steht] verloren geht...
Muss ja irgendwie die entsprechenden Daten aus meiner Datenhaltung auslesen...

Im OnDrawCell-Ereignis zeichne ich jetzt die Zeitspannen, die Wochentage als Überschrift, die graue Hintergrundfarbe für die Wochenenden und die Termine in der entsprechenden Farbe.
Die Zellenhöhe ermittle ich mit TextHeight['Mein AusgabeString'] und weise das halt RowHeights[ARow] zu, aber das führt dann dazu, dass die Zellen minimal klein sind und ganz furchtbar flackern, davon mal abgesehen ist der Prozessor zu 100% ausgelastet:
http://stud.fh-wedel.de/~mi5718/flackern.JPG
die flackernde Ansicht nach Setzen der RowHeights
Ich denke, dass das OnDrawCell-Ereignis einfach zu oft aufgerufen wird, weiß aber leider nicht, wie ich das vermeiden kann :(

Vllt eine Idee dazu mit den Hintergrundinformationen?

LG Sunny
*dieLangsamInsBettMuss,AberDieFingerDochNichtVonDe lphiLassenKann*

marabu 23. Feb 2006 06:37

Re: mehrzeilige Zellen im Stringgrid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Herzlich willkommen in der Delphi-PRAXiS, Sunny.

Eventuell kommst du auch mit DefaultDrawing = TRUE zurecht. Ein Beispiel habe ich angehängt.

Grüße vom marabu

Hansa 23. Feb 2006 12:56

Re: mehrzeilige Zellen im Stringgrid
 
Aha, Terminkalender. Da nützt die Programmierkunst erst mal gar nichts. Ich schreibe mal spontan, was mir als Wünsche/Vorstellungen dazu einfällt. Ich will auf den ersten Blick sehen, wann ein Termin ist. Hierzu würde eine farblische Hervorhebung der Zellen ausreichen. . in zweiter Spalte wäre auch günstig (Termin wo mit wem ?) Das könnte man auch durchziehen über diverse Zeiträume. Ist der ganze Monat rot, so wäre klar was los ist. :mrgreen: Das wäre mal das eine. Das nächste sind die Detailinformationen. Würde ich gerne bei Bedarf auch genau sehen. Mit 2 Zeilen oder 3 oder 4 kommst Du aber nicht sehr weit. Ich will bei komplizierten Fällen nicht gezwungen sein "wg.div.vorh.gefü.Gespr.vorh.w.anr." eingeben. Und das eventuell noch durch Zeilenumbrüche abgeschnitten. :lol: Keiner will von einem Computerprogramm genötigt werden sich einen abzumurksen. Gut wäre es außerdem, wenn diese Detailinformationen automatisch eingeblendet werden, wenn die Maus über der entsprechenden Zelle ist.

Mir fällt dazu noch einiges mehr ein, aber zuerst will ich mal wissen, ob das bei Dir überhaupt in der Richtung geplant ist. Reichen in Deinem Fall 2 oder 3 Zeilen, dann ist der eingschlagene Weg vielleicht ausreichend. Deshalb vorerst nur ein Tip, wie die Farben der Zellen einfach hinzukriegen sind. Ich will natürlich auch eine Klassifizierung der Termine, z.B. so was : grün : "CD muß morgen fertig sein", rot : "Termin", lila : "im Termin versprochene neue CD muß raus" usw. Farben sind willkürlich gewählt. 8) Also gut, zumindest die Farben : die schreibst Du als Konstante einfach in die Zellen. Im OnDrawCell wird dann in Abhängigkeit der dahinterliegenden Zahl die betroffene Zelle in der gewünschten Farbe neu gezeichnet. Der Trick ist dabei, daß man die eigentlich in der Zelle stehende Zahl gar nicht zu sehen bekommt. Ähnlich könnte man das mit den Detailinformationen machen. Wie wäre es eigentlich dazu eine Combobox zu "mißbrauchen" ? Ist eine zu sehen, dann wäre wohl klar, daß Detailinformationen hinterlegt sind.

Noch zum Flackern : das kommt daher, wenn Zellinhalte verändert werden. Z.B. alleine durch Cell[...] := clRed; Das veranlaßt das Stringgrid, sich immer wieder neu zu zeichnen. Du mußt auch immer im OnDrawCell die Zellen genau abfragen !

sunshine270882 23. Feb 2006 13:21

Re: mehrzeilige Zellen im Stringgrid
 
Hi Hansa!

Ich habe für die Umsetzung dieser Aufgabe ein paar feste Vorgaben, wie z.B. dass in der Wochenübersicht nur Uhrzeit und Titel angezeigt werden, jeweils in der Farbe des Benutzers.
Die Detailinformationen zum Termin soll man sich in der allgemeinen Terminübersicht für jeden Benutzer einzeln anzeigen lassen.
Bei Bedarf würde ich sonst auch den Link zu der Aufgabenstellung rausrücken ;)

Ich muss mich jedenfalls strikt an die Vorgaben halten :(

Ich versuch gleich mal Marabus Tipp einzubauen, vllt hilft mir das ja schon weiter...


LG Sunny

sunshine270882 23. Feb 2006 15:28

Re: mehrzeilige Zellen im Stringgrid
 
Jipie :D :D :D

Vielen Dank an Marabu, habe dein Code-Bsp gerade erfolgreich an mein Projekt angepasst :D

Jetzt fehlt nur noch an einer Stelle des Programms ein Repaint für's Grid, ansonsten funktioniert es einwandfrei :)

LG Sunny


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