![]() |
mehrzeilige Zellen im Stringgrid
Hallo!
Gibt es eine Möglichkeit mehrzeilige Zellen in einem Stringgrid zu erzeugen? Gruß Michael |
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 |
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.
|
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:
Delphi-Quellcode:
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...'
...
// 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; Hat da vllt jemand eine Idee, wie man das Problem lösen kann? Freu mich auf Antworten :) Liebe Grüße, sunny |
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)
|
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. ![]() ![]() 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: ![]() ![]() 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* |
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 |
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 ! |
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 |
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 04:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz