Autor |
Beitrag |
Terra
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: Mo 06.11.06 11:31
Hallo zusammen,
ich habe da ein Problem und schon überall gesucht aber nichts gefunden.
Ich wollt eine Art Kalender programmieren, wo in ein StringGrid Feld Buttons "TButton" die Einträge darstellen sollen. Die sollen natürlich auch ausgewählt werden können um die nachrichten anzuzeigen. Aber dazu später.
Vorerst geht es mir darum ein Button in einer StrinGrid-Zelle darzustellen.
Kann mir jemand vielleicht verraten, wie ich das mache?
Wie gesagt, hab schon überall gesucht aber nix dazu gefunden. Geht das vielleicht garnicht?
Hier noch ein Beispiel wie ich das meine:
Terra
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mo 06.11.06 12:59
Hallo,
such mal nach STRINGGRID CHECKBOX , das kann man dann an TButtons anpassen.
Ich bevorzuge die Buttons selbst mit DrawFrameControl in OnDrawCell zu zeichen, ist einfacher/schneller.
In StringGrid.Cells[x,y] setzt man die Beschriftungen, ein Flag für die Zustände des Buttons kann man StringGrid.Objects[x,y] zuweisen.
Das(die?) Flag 'gedrückt' setzt du im Event OnMouseDown, für nicht gedrückt in OnMouseUp. Durch eine Zuweisung an Objects wird onDrawCell ausgelöst und man kann entsprechend des gesetzten Flag's den Button zeichnen.
Delphi-Quelltext 1:
| DrawFrameControl(FCanvas.Handle, Rect, DFC_BUTTON, Flags); |
Jetzt fehlt noch ein Event OnClick um abhängig von der Zelle eine Prozedur ausführen zu können.
Da bietet sich OnMouseUp wieder an, über die Variablen X und Y kannst mit Hilfe von MouseToCell die angeklickte Zelle(gezeichneten Button) ermitteln und reagieren.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Terra 
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: Mo 06.11.06 14:17
Also ich habe das hier www.dsdt.info/tipps/?id=566 in einem anderen Forum gefunden.
Das gilt allerdingst für ne combobox, die nur angezeigt wird, wenn die Zelle ausgewählt wurde.
Ist diese Funktion schonmal eine Grundlage für mein vorhaben? ... Hab jetzt nach dem gesucht, was du oben vorgeschlagen hast aber mit dem Ergebniss bin ich genau so schlau wie vorher.
es ist schön, das dort einigermaßen beschrieben wird, wie man das machen könnte aber das bringt mich auch nicht weiter, da ich die Befehle nicht kenne, die ich verwenden müsste.
Gruß,
Terra
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 06.11.06 15:05
Warum muß es denn ein Button sein ? Egal. Du mußt den dann lediglich im Grid zeichnen und dann direkt das OnClick, OnSelect oder was es so gibt des Stringgrids auswerten anhalt der Spalten / Zeilen. Der User hat dann den Eindruck, wenn er auf den Button klickt, das sei ein Button. In Wirklichkeit hat er eine Zelle des Grids angeklickt.Würde mal so sagen : den Unterschied merkt keiner. 
_________________ Gruß
Hansa
|
|
Terra 
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: Mo 06.11.06 16:00
Na ich weiß ja net, es kann auch was anderes sein aber ich fand jetzt das ein Button eine gute Wahl ist. wenn du was besseres weißt bin ich natürlich offen für dein vorschlag.
Kann ich dann eigentlich eine Zelle in einer Zelle machen ?
Terra
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 06.11.06 19:03
Mache es doch einfach einfacher.  Dreh- und Angelpunkt dürfte allerdings schon das OnDrawCell sein. Der Button bringt im Prinzip doch keinerlei Nutzen. Ich skizziere mal kurz, um was es mir geht. Der Benutzer soll doch wohl nur erkennen können, ob er einen "Eintrag" anklicken kann oder eben nicht, weil nichts da ist. Dies bedeutet, eine Entscheidung treffen zu müssen. Dafür genügt prinzipiell auch 0 und 1. Und genau da kann man ansetzen. Zumindest, sofern der User eine Information braucht, ob weitere Informationen verfügbar sind oder nicht. Sag also erst mal, ob es genügen würde, das Wort "Eintrag" bei Bedarf im Stringgrid anzuzeiegen, oder ob es, warum auch immer, ein Button sein muß.
_________________ Gruß
Hansa
|
|
Terra 
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: Di 07.11.06 09:26
Naja, ganz so einfach ist es wohl anscheinend doch nicht.
Kann aber auch sein, das ich mich nicht richtig ausgedrückt habe bzw. das das Bild oben ein wenig Irreführend war, da das Wort "Eintrag" nur ein Beispiel war und nicht die Regel ist.
Also, der User hat die Möglichkeit einen Eintrag in einem sepperaten Fenster einzugeben. Z.B "Hallo, heute ist Dienstag der 07.11.2006, 14:00 Uhr" .... Desweiterem eine Startuhrzeit. Sagen wir mal 14:00 Uhr.
Nachdem er dieses dann bestätigt hat soll dann ein Fensterchen in der Zelle erscheienen mit einem Teil des Textes oben in Zeile "14:00 Uhr". Da es ja aber mehrere Einträge zwischen 14 - 15 Uhr sein können, sollte das Feld eine bestimmte größe haben, so das später auch mehrere Fensterchen nebeneinander dargestellt werden können.
Um dann auch den Eintrag wieder abzurufen, soll es möglich sein, einfach auf das Fensterchen zu klicken, so das ein neues Fenster aufgeht und dort die volle Nachricht anzeigt.
Schön zu sehen ist sowas auch im Terminkalender von Outlook Express (die neue Version)
Hoffe, das war ein wenig verständlicher.
Terra
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Di 07.11.06 10:12
Hallo,
wie sieht denn das im Outlook Express aus, mach doch mal ein Screenshoot-Ausschnitt davon und füge das Deinem Beitrag hinzu.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Terra 
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: Di 07.11.06 12:04
Werds morgen reinstellen, da ich die neue Version nicht hier habe sondern zu Hause.
Terra
|
|
|