Autor |
Beitrag |
accessViolation
      
Beiträge: 68
Win
Delphi 5 Enterpr.
|
Verfasst: Sa 10.06.06 13:21
Hallo!
Ich bin auf der Suche nach einer Komponente, die so ähnlich wie ein Stundenplan aussieht:
Eine Tabelle, die oben auf der X-Achse die Uhrzeit hat (0 bis 23 Uhr)
und auf der Y-Achse (links) die Tage MO. bis Fr.
Dann soll man innerhalb eines Tages (also in einer Zeile) längs Felder markieren können (z.B. von 8-18 Uhr in der Farbe rot, von 18-22 Uhr in der Farbe grün usw.)
Und das soll für jeden Tag funktionieren.
Das ganze könnte z.B. ein Raumbelegungsplan werden, wo sichtbar ist, welche Veranstaltung zu welcher Zeit in einem Raum stattfindet.
Neben dieser Komponente soll noch eine ListBox o.ä. sein, in der man die Veranstaltung auswählen kann. Da jeder Veranstaltung eine Farbe zugewiesen ist, will ich in der oben beschriebenen Komponente beim Markieren der Felder diese gerade ausgewählte Farbe anwenden.
So könnte die Komponente aussehen (hier ein improvisiertes Bild):
Kennt jemand so eine Komponente? Am besten frei downloadbar... aber auch kostenpflichtig?
Viele Grüße
Einloggen, um Attachments anzusehen!
|
|
Hobby-Programmierer
      
Beiträge: 238
Erhaltene Danke: 4
Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
|
Verfasst: Sa 10.06.06 13:33
Mahlzeit ...,
accessViolation hat folgendes geschrieben: | Hallo!
Ich bin auf der Suche nach einer Komponente, die so ähnlich wie ein Stundenplan aussieht:
Eine Tabelle, die oben auf der X-Achse die Uhrzeit hat (0 bis 23 Uhr)
und auf der Y-Achse (links) die Tage MO. bis Fr.
|
Wieso machst Du das nicht selbst. So schwierig ist das ganze nicht, zumindest die Tabelle ist doch in einem Stringgrid schnell selbst gezaubert! Array erstellen und im SG eintragen -> mit DrawCell malen. Fertig ist die Anzeige und gelernt hast Du dabei auch ne Menge
LG Mario
|
|
accessViolation 
      
Beiträge: 68
Win
Delphi 5 Enterpr.
|
Verfasst: Sa 10.06.06 14:42
Hört sich schonmal nicht schlecht an.
Wie kann ich denn eine bestimmte Zelle farbig machen? Ich will auf eine Zelle klicken und dann soll sie z.B. einen roten Hintergrund bekommen.
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 10.06.06 14:46
Versuch doch erstmal das erstere hinzubekommen, das färben der Zellen kommt danach...
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: Sa 10.06.06 15:58
Also, mal so ganz schnell zusammen getippt eine Prozedur, die eine Zelle einfärbt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure FillCellRed(ACol, ARow: Integer); begin with Stringgrid.Canvas do begin Brush.Color:=RGB(255,0,0); FillRect(Stringgrid.CellRect(ACol,ARow)); end; end; |
Edit1: Eine einzelne Zelle einzufärben ist noch einfacher, als ich dachte, da hab ich noch fix den Quelltext geändert 
|
|
Hobby-Programmierer
      
Beiträge: 238
Erhaltene Danke: 4
Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
|
Verfasst: So 11.06.06 00:02
Nabend ...,
fidionael hat folgendes geschrieben: | Eine einzelne Zelle einzufärben ist noch einfacher, als ich dachte, da hab ich noch fix den Quelltext geändert  |
Zellen einzufärben ist gewiss keine Schwierigkeit, gibts auch genug Anregungen in versch. Foren! Vio möchte aber ein ganzes Projekt (Veranstaltungsplan) erstellen. Dazu sollte er auch von vorne beginnen. Das malen seiner Daten kommt zum Schluss, sonst bekommt er sowas bestimmt net hin. Ich spreche da aus Erfahrung!!
LG Mario
Einloggen, um Attachments anzusehen!
|
|
Hobby-Programmierer
      
Beiträge: 238
Erhaltene Danke: 4
Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
|
Verfasst: Mo 12.06.06 06:08
Tach und fedisch ...,
ich hatte ein wenig Langeweile (Frau und Kids sind ausgeflogen  ) und hab Dir dat Programm in der Grundstruktur schon mal getippselt. Auf das Array hab ich aus Bequemlichkeit verzichtet und statt dessen direkt in ein angehängtes Objekt geschrieben. Auf das speichern und laden habe ich ebenfalls verzichtet  denn Du möchtest ja auch noch etwas zum Proggen haben
LG Mario
PS: erstmal was zum anschauen, den Code lade ich heute Nachmittag hoch wenn ich den anständig kommentiert habe.
Einloggen, um Attachments anzusehen!
|
|
Hobby-Programmierer
      
Beiträge: 238
Erhaltene Danke: 4
Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
|
Verfasst: So 18.06.06 22:03
...,  und Sorry -
Hatte den Thread ganz vergessen
Delphi-Quelltext 1:
| Grid_Plan.Objects[cCol, cRow]:= TObject(ComboBox1.Canvas.Brush.Color); | ... Zuweisung der Zellfarbe
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.Grid_PlanDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); const cFormat = DT_SINGLELINE or DT_CENTER or DT_VCENTER; var cText: String; begin with (Sender as TStringGrid) do begin cText:= Cells[ACol, ARow]; if (gdFixed in State) then begin Canvas.Brush.Color:= clBtnFace; Canvas.FillRect(Rect); DrawEdge(Canvas.Handle, Rect, 4, 4 or 8); DrawEdge(Canvas.Handle, Rect, 4, 1 or 2);
end else begin if TColor(Grid_Plan.Objects[ACol, ARow]) = 0 then Canvas.Brush.Color:= clInfoBk else Canvas.Brush.Color:= TColor(Grid_Plan.Objects[ACol, ARow]);
Canvas.FillRect(Rect); end; DrawText(Canvas.Handle, PChar(cText), Length(cText), Rect, cFormat); end; end; | ... malt im DrawCell des Stringgrids
LG Mario
Einloggen, um Attachments anzusehen!
|
|
accessViolation 
      
Beiträge: 68
Win
Delphi 5 Enterpr.
|
Verfasst: Di 20.06.06 22:16
Vielen Dank für die Anregungen!
Habe es prinzipiell genauso gelöst.
Schöne Grüße
PS: In diesem Zusammenhang hab ich noch ein kleines Problem mit dem OnMouseMove-Ereignis... Dazu aber die nächsten Tage mehr...
|
|
Hobby-Programmierer
      
Beiträge: 238
Erhaltene Danke: 4
Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
|
Verfasst: Fr 23.06.06 23:29
Nabend ...,
schön das Du das auch geschafft hast
Aber jetzt solltest Du einen Schritt weiter gehen und das für das gesamte Jahr umsetzen. Oder reicht Dir etwa eine einfache Wochenverwaltung?
Auf jeden Fall solltest Du dich wirklich mit dem Gedanken anfreunden ein Array zu verwenden oder noch besser ein Array of Record! In diesem kannst Du dann für jeden Tag zusätzlich Infos mit abspeichern und sogar Statistiken zb. über die Raumauslastung erstellen. Speichern und laden der Datensätze ist dann auch nur noch ein Klacks.
Ps: Zeige uns doch mal deinen Code damit wir sehen wie weit Du bereits gekommen bist ...
LG Mario 
|
|
|