| Autor |
Beitrag |
daywalker0086
      
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Fr 01.04.11 00:05
Hallo Leute,
ich wollte einmal fragen mit welcher Komponente ich die ANzeige so hinbekomme wie im angehängten Bild(schlechte Fotomontage).
Zur Zeit nutze ich eine TStringList, welche mir Messwertnamen und Messwerte anzeigt, welche dynamisch dort eingetragen werden.
Jetzt soll als dritte Spalte eine Checkbox rein, mit der ausgewählt weren kann ob dieser MEsswert später verwendet wird oder nicht.
Welche Komponente statt der Stringlist kann ich nutzen um in ähnlicher tabellarischer Form auch eine Checkbox zu dem jeweiligen Wert zu haben? Mit der Stringlist geht das wohl nicht( oder hab was übersehen).
Die Anzahl der Messwerte leigt immer zwischen 10 und 20, wird also nicht altzu lang.
Für Vorschläge zur Realisierung wäre ich dankbar.
Späte Grüße
Christian
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 01.04.11 00:21
Das geht ziemlich einfach mit der Virtual Treeview:
www.delphi-gems.com/...;id=12&Itemid=38
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 01.04.11 01:06
Moin!
Falls du mit Onboard-Komponenten auskommen willst/musst: das TListView kann auch Checkboxen zu den Einträgen verwalten, einfach mal in die Hilfe schauen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Fr 01.04.11 02:06
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
daywalker0086 
      
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Di 05.04.11 10:33
Hallo Jungs, nach kurzer Pause bin ich schon soweit das mir die Checkbox in den Zellen
angezeigt wird. Nur leider bleibt diese Checkbox nicht da sondern ist immer nur in der Zelle di egrad den Fokus hat. Wenn ich mit der Tabtaste weiter springe kommt auch die Checkbox mit. Aber die soll ja in jeder Zeile da stehen und das nur in einer bestimmten Spalte, von mir aus auch in der 1.
Das hab ich bis jetzt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (ACol >= StringGrid1.FixedCols) and (AROw >= StringGrid1.FixedRows) and (gdFocused in State) then setRect(Rect) end;
procedure TForm1.setRect(rec: TRect); var r:TRect; begin with cb1 do begin CopyRect(r, rec); r.BottomRight := Parent.ScreenToClient(StringGrid1.ClientToScreen(r.BottomRight)); r.TopLeft:=Parent.ScreenToClient(StringGrid1.ClientToScreen(r.TopLeft)); SetBounds(r.Left,r.Top,r.Right-r.Left,r.Bottom-r.Top); BringToFront; end; end; |
Wo müsst ich noch hinschauen damit die Checkbox immer in einer Zeile bleibt und nur einfach wenn eine neue Zeile erzeugt wird dann auch gleich di edazugehrige Checkbox mit eingefügt wird?
|
|
alex517
      
Beiträge: 60
D7Ent, FB, FIBPlus
|
Verfasst: Di 05.04.11 10:55
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.04.11 11:01
Ich merke schon, mit der VirtualTreeView wäre es dir zu einfach, außerdem sieht das zu gut aus.
Na gut, grundsätzlich bleiben dir nur zwei Möglichkeiten: Entweder du erzeugst für jede Zeile eine eigene ComboBox oder du zeichnest es selbst.
Wie es mit selbst zeichnen geht, steht ja in dem Link von alex517 drin.
|
|
DonManfred
      
Beiträge: 148
Erhaltene Danke: 2
Windows 7
Delphi XE3 Pro + HTML5Builder
|
Verfasst: Di 05.04.11 13:25
Alternativ (kein Boardmittel) gäbe es noch TAdvStringGrid von TMS-Software. checkboxen, Radiobuttons, Dropdowns, uvm geht damit...
_________________ Gruss Manfred
|
|
daywalker0086 
      
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Di 05.04.11 13:25
Bin nun doch auf Virtual Treeview umgeschwenkt
Meine Checkboxen hab ich schon und auch die übrigen Spalten
Nur wie kann ich jetzt dynamisch den Text der Nodes verändern? also übergeben lassen?
So erstelle ich ein neuen Node und will gleich die erste Spalte beschriften lassen:
Delphi-Quelltext 1: 2:
| node:=vst.AddChild(nil); vst.Text[node,0]:= Namefilter(Data); |
Leider wird der Text nicht übernommen.
Ich hab in meinem Tutorial dies hier gefunden und abgeändert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); begin case Column of -1, 0: CellText := Namefilter(Data); 2: CellText := 'test'; else CellText:=''; end; end; |
Das problem ist wenn ich einen neuen Node anlegen werden alle Zeilen der ersten Spalte mit dem neuen Wert überschrieben und nicht nur der neu angelegte Node.
Wo liegt denn schonwieder der Denkfehler?
Später muss ich ja auch nochmal den Text in der zweiten Spalte edititeren können...
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.04.11 13:44
Im Ereignis OnGetText bekommst du den Knoten übergeben. An den musst du auch einen Pointer auf deine Daten angehängt haben beim Erstellen des Knotens. Dann kannst du daraus dynamisch auslesen welcher Text da hin soll.
|
|
daywalker0086 
      
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Di 05.04.11 14:13
Hast du ein Beispiel zur Hand? Ich begreifs nicht
Das geht auch nicht:
Delphi-Quelltext 1:
| vst.OnGetText(vst,node,0,ttNormal,'Test'); |
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.04.11 14:42
|
|
daywalker0086 
      
Beiträge: 243
Delphi 2005 Architect
|
Verfasst: Di 05.04.11 16:17
So hab nochmal alles durchgeschaut, jetzt funzt es erstmal, nur noch ein weitere kleines Problem.
Ich hab eine extra Spalte wo meine Checkbox angezeigt werden soll.
mit folgenden Code wird die checkbox jedoch in der ersten Spalte angezeigt, obwohl ich für diese Spalte "Checkbox" auf flase stehen habe.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); begin if Sender.GetNodeLevel(Node) = 0 then VST.CheckType[Node] := ctCheckBox; VST.CheckState[Node] := csunCheckedNormal; end; |
Wie bekomm ich die Checkbox verschoben? konnte leider in dem Tutorial nix dazu finden.
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.04.11 17:09
So direkt geht es auch nur in der ersten Spalte. Ich habe aber ohnehin viel selbst gezeichnet, benutzt habe ich das zum Beispiel in einem Projekt, das ich vor ein paar Jahren auf den Markt bringen wollte, siehe Anhang.
Ich muss zu Hause mal schauen wie das genau ging, auswendig weiß ich das auch nicht alles.
Einloggen, um Attachments anzusehen!
|
|