Autor Beitrag
Terra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: 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:
user defined image

Terra
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 06.11.06 12:59 
Hallo,

such mal nach Suche in der Entwickler-Ecke 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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. :D

_________________
Gruß
Hansa
Terra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mo 06.11.06 19:03 
Mache es doch einfach einfacher. :mrgreen: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Di 07.11.06 12:04 
Werds morgen reinstellen, da ich die neue Version nicht hier habe sondern zu Hause.

Terra