![]() |
TStringGrid Zellen - TUpDown in Zellen
Erneut Grüße.
Wie kann ich jede Zelle der 2. Column mit einem TUpDown-Feature ausstatten? Ich möchte damit die Editiermöglichkeit dieser Zellen begrenzen. Die Anzahl der Rows ändert sich zur Laufzeit mehrmals. Ich halte ein integriertes TUpDown programmiertechnisch für mich interessanter als ein neben dem TStringGrid existierendes TUpDown. Können Zellen mit so einem Zusatzobjekt ausgestattet werden, so daß es bei Row-Erstellung schon automatisch mit dabei ist? Auch gleich eine weitere Frage: das TUpDown braucht erst bei Editieren der Zelle sichtbar zu sein, ist dies machbar? |
Re: TStringGrid Zellen - TUpDown in Zellen
Hallo Sven,
der standardmäßige inplace editor wird einfach vor dem StringGrid gezeichnet, wenn er gebraucht wird. Genauso kannst auch du ein beliebiges Control dort zeichnen. Dazu ermittelst du das Rechteck, welches dir zur Verfügung steht und überlegst dir, wie du den Edit-Modus ein- bzw. ausschaltest. Beispiele findest du, wenn du im Netz nach "stringgrid inplace editor" suchst. ![]() marabu |
Re: TStringGrid Zellen - TUpDown in Zellen
Hallo,
danke zunächst für den Link. Ich habe mich dort umgeschaut und versucht, jenen Code für mein TUpDown zu adaptieren. Leider klappt es nicht richtig: - Das TUpDown wird nicht sichtbar. - Andere Buttons sind nicht mehr benutzbar. Das TUpDown wurde invisible auf der selben Form abgelegt, reicht von 1 bis 10. Hier zum besseren Verständnis der Code:
Delphi-Quellcode:
Was muß ich ändern?
procedure TAlpha.StringGridSounds0SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean); var R: TRect; begin if ACol=2 then begin with StringGridSounds0 do begin Options:=Options+[goEditing]; end; R:=StringGridSounds0.CellRect(ACol,ARow); R.Left:=R.Left+StringGridSounds0.Left; R.Right:=R.Right+StringGridSounds0.Left; R.Top:=R.Top+StringGridSounds0.Top; R.Bottom:=R.Bottom+StringGridSounds0.Top; with UpDownSounds do begin Left:=R.Left+1; Top:=R.Top+1; Width:=(R.Right+1)-R.Left; Height:=(R.Bottom+1)-R.Top; Visible:=True; SetFocus; end; end else if ACol<>2 then begin with StringGridSounds0 do begin Options:=Options-[goEditing]; end; end end; procedure TAlpha.StringGridSounds0Exit(Sender: TObject); begin StringGridSounds0.Cells[2,StringGridSounds0.Row]:=IntToStr(UpDownSounds.Position); UpDownSounds.Visible:=False; StringGridSounds0.SetFocus; end; |
Re: TStringGrid Zellen - TUpDown in Zellen
Wo und wie erzeugst du das UpDown-Control? Soll das Control immer sichtbar sein, wenn eine Zelle in der dritten Spalte des Grids fokusiert ist?
marabu |
Re: TStringGrid Zellen - TUpDown in Zellen
Hallo Marabou,
danke für Deine Hilfe. Ich erzeuge das TUpDown beim Designing der Form in der IDE, also wohl bei Form.OnCreate. denke ich. Ja, jedesmal, wenn irgendeine Zelle der dritten Säule (Column 2) selektiert wurde, soll das TUpDown sichtbar werden. Und Unsichtbar, wenn der Editiervorgang abgeschlossen ist und die Zelle den Wert des TUpDown.Position übernommen hat. |
Re: TStringGrid Zellen - TUpDown in Zellen
Wer kann helfen?
|
Re: TStringGrid Zellen - TUpDown in Zellen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sven,
dein Versuch ist doch gar nicht so falsch gewesen. Schau dir mein Beispiel an und finde den Unterschied. Wie es am Ende zu realisieren ist, das hängt von einer Reihe von Detailanforderungen ab, die du noch nicht mitgeteilt hast. Grüße vom marabu |
Re: TStringGrid Zellen - TUpDown in Zellen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Marabou,
ich denke, ich werde Dir (und allen anderen hilfsbereiten Teilnehmern) den gesamten Sourcecode zugänglich machen. Da ich keine 3rd-Party-Elemente verwende, sollte also alles ganz problemlos kompilierbar sein. Das Löschen von Rows geht auch noch nicht richtig, aber vieleicht komme ich damit selbst klar. Alle Versuche mache ich gegenwärtig mit dem StringGridSounds0 innerhalb dieses Projektes. Das seitliche UpDownSounds ist nur eine vorläufige Lösung, es soll ja durch ein UpDown innerhalb jeder editierbaren Zelle ersetzt werden. Zitat:
Zitat:
Grüße, Sven |
Re: TStringGrid Zellen - TUpDown in Zellen
Hallo Marabou,
während Deine Beispielsform funktioniert, bleibt bei meiner Form das UpDown noch immer unsichtbar. Hier mein modifizierter Code nach Deinem Beispiel:
Delphi-Quellcode:
Entweder liegt es am Positionieren, oder an irgend einem anderen Faktor welchen ich noch nicht kenne.
procedure TAlpha.StringGridSounds0SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean); var R: TRect; begin if ACol=2 then begin with StringGridSounds0 do begin Options:=Options-[goEditing]; R:=CellRect(ACol, ARow); end; Zeile:=ARow; with UpDownSounds do begin Position:=StrToInt(StringGridSounds0.Cells[2,Zeile]); Top:=R.Top; Left:=R.Right; Visible:=True; end; end else if ACol<>2 then begin with StringGridSounds0 do begin Options:=Options-[goEditing]; end; UpDownSounds.Visible:=False; end end; Sven |
Re: TStringGrid Zellen - TUpDown in Zellen
(siehe unten)
|
Re: TStringGrid Zellen - TUpDown in Zellen
Ha! Problem gelöst!
Mein dummer Fehler war einfach, das TUpDown nicht auf dem StringGrid plaziert zu haben, sondern auf einem anderen Panel. Dadurch führte das Platzieren via TRect auch ins Leere. Marabou, vielen Dank für Deine Hilfe. Durch Deinen Code habe ich letztendlich nun das TUpDown an der Zelle. Vielen Dank! Dieser Thread ist hiermit gelöst (wie kann ich ihn als gelöst kenntlich machen?). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz