AGB  ·  Datenschutz  ·  Impressum  







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

mehrzeilige Zellen im Stringgrid

Ein Thema von w-lan · begonnen am 25. Okt 2005 · letzter Beitrag vom 27. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
w-lan

Registriert seit: 11. Mai 2005
16 Beiträge
 
#1

mehrzeilige Zellen im Stringgrid

  Alt 25. Okt 2005, 11:32
Hallo!
Gibt es eine Möglichkeit mehrzeilige Zellen in einem Stringgrid zu erzeugen?

Gruß

Michael
  Mit Zitat antworten Zitat
marabu

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

Re: mehrzeilige Zellen im Stringgrid

  Alt 25. Okt 2005, 12:04
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
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#3

Re: mehrzeilige Zellen im Stringgrid

  Alt 25. Okt 2005, 12:39
Oder ein anderen StringGrid verwenden, ich wäre mal wieder beim AdvStringGrid von TMS, da kann man Multilinecells ein und aus schalten.
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
sunshine270882

Registriert seit: 15. Feb 2006
Ort: bei HH
5 Beiträge
 
Delphi 7 Personal
 
#4

Re: mehrzeilige Zellen im Stringgrid

  Alt 22. Feb 2006, 23:13
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 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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: mehrzeilige Zellen im Stringgrid

  Alt 23. Feb 2006, 01:07
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)
Gruß
Hansa
  Mit Zitat antworten Zitat
sunshine270882

Registriert seit: 15. Feb 2006
Ort: bei HH
5 Beiträge
 
Delphi 7 Personal
 
#6

Re: mehrzeilige Zellen im Stringgrid

  Alt 23. Feb 2006, 01:50
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*
  Mit Zitat antworten Zitat
marabu

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

Re: mehrzeilige Zellen im Stringgrid

  Alt 23. Feb 2006, 07:37
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
Angehängte Dateien
Dateityp: zip rowheights_100.zip (2,1 KB, 123x aufgerufen)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: mehrzeilige Zellen im Stringgrid

  Alt 23. Feb 2006, 13:56
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. 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. 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 !
Gruß
Hansa
  Mit Zitat antworten Zitat
sunshine270882

Registriert seit: 15. Feb 2006
Ort: bei HH
5 Beiträge
 
Delphi 7 Personal
 
#9

Re: mehrzeilige Zellen im Stringgrid

  Alt 23. Feb 2006, 14:21
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
  Mit Zitat antworten Zitat
sunshine270882

Registriert seit: 15. Feb 2006
Ort: bei HH
5 Beiträge
 
Delphi 7 Personal
 
#10

Re: mehrzeilige Zellen im Stringgrid

  Alt 23. Feb 2006, 16:28
Jipie

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

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

LG Sunny
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:10 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