AGB  ·  Datenschutz  ·  Impressum  







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

Zelle teilen

Ein Thema von SaFu · begonnen am 18. Dez 2007 · letzter Beitrag vom 3. Jan 2008
Antwort Antwort
Seite 2 von 2     12   
s-off
(Gast)

n/a Beiträge
 
#11

Re: Zelle teilen

  Alt 3. Jan 2008, 13:55
Hallo,

wie bereits meine Vor'redner' geschrieben haben, wird eine absolute horizontale Splittung einer Zelle nicht möglich sein.
Der Ansatz von Real_Thunder geht in die Richtung einer vertikalen Teilung, was allerdings ebensowenig funktioniert.

Eine optische Aufteilung ist möglich, und genau da würde ich ansetzen:
  • Erzeuge eine neue Klasse, abgeleitet von TStringGrid und definiere die OnDrawCell-Eigenschaft neu. Die Reaktion auf das Event, also den Inhalt der DrawCell-Methode, erläutere ich später.
  • Erzeuge eine neue Klasse, nenne sie z.B. TCellValue, abgeleitet von TObject, und gebe dieser zwei Felder - sUpperValue und sLowerValue; beide als String. Diese repräsentieren hinterher den Inhalt Deiner Zelle; den oberen und den unteren Teil.
  • Im OnClick-Event des PopupMenü-Items, welches die Teilung vornehmen soll, rufst Du eine Methode auf, welche die optische Teilung der Zelle letztendlich durchführt.
  • Diese erzeugt eine Instanz von TCellValue und weist sie der Zelle zu (als Objekt - TStringGrid.Objects). Anschliessend ruft sie die Repaint-Methode Deines Grids auf, welche wiederrum das hinter OnDrawCell steckende Event auslöst und Deine(!) DrawCell-Methode aufruft.
  • Nun also der Inhalt Deiner DrawCell-Methode (dafür hast Du im ersten Schritt die OnDrawCell-Eigenschaft neu definiert): in dieser prüfst Du, ob die Zelle, die gerade neu gezeichnet wird, ein Objekt (TCellValue) besitzt. Ist dieses nicht der Fall, dann einfach die Zelle zeichnen. Ist dieses aber der Fall, dann wird die Zelle optisch geteilt. Dazu ziehst Du auf dem Canvas einfach eine horizontale Linie im Rect der Zelle (halbe Höhe, gesamte Breite).
  • Da sich die Zelle nun aber nur wie eine einzelne Zelle verhält, nicht wie zwei, kannst Du die Unterscheidung, ob Du in den oberen oder den unteren Teil schreiben willst, nur durch einen Mausklick treffen; entweder Du klickst über der Linie, oder darunter.
    Du merkst Dir also, ob beim Aufruf des Zell-Editors über-, oder unterhalb der Linie geklickt wurde.
  • Nun schreibt der Anwender den Text in die Zelle. Ist er damit fertig, gehts weiter. Je nachdem, ob ober- oder unterhalb der Trennlinie geklickt woreden ist, editierst Du sUpperValue oder sLowerValue aus dem Objekt der Zelle (TCellValue).
  • Abschliessend malst Du den nun editierten Inhalt von Deinem TCellValue-Objekt auf das Canvas des Grids - den oberen Teil über die Linie, und den unteren Teil darunter; hierbei musst Du dann natürlich die Schriftgröße entsprechend anpassen und darfst keinen Zeilenumbruch zulassen.

Soviel zur Theorie - viel Erfolg bei der Umsetzung

Edit: Rechtschreibung
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:06 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