Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 01.04.11 00:21 
Das geht ziemlich einfach mit der Virtual Treeview:
www.delphi-gems.com/...;id=12&Itemid=38
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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. :les: :think: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 01.04.11 02:06 
user profile icondaywalker0086 hat folgendes geschrieben Zum zitierten Posting springen:
Zur Zeit nutze ich eine TStringList, welche mir Messwertnamen und Messwerte anzeigt, welche dynamisch dort eingetragen werden.
Das glaube ich eher nicht. TStringList ist keine visuelle Komponente, vom Screenshot her tippe ich mal auf TStringGrid.
Von daher böte es sich an, die Checkbox im OnDrawCell selber zu zeichnen und über einen passenden Click-Handler das umschalten zu erledigen.


user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Falls du mit Onboard-Komponenten auskommen willst/musst: das TListView kann auch Checkboxen zu den Einträgen verwalten, einfach mal in die Hilfe schauen. :les: :think: ;)
Aber nur vor/in der ersten Spalte...

_________________
"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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 60


D7Ent, FB, FIBPlus
BeitragVerfasst: Di 05.04.11 10:55 
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 user profile iconalex517 drin.
DonManfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148
Erhaltene Danke: 2

Windows 7
Delphi XE3 Pro + HTML5Builder
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Di 05.04.11 13:25 
Bin nun doch auf Virtual Treeview umgeschwenkt :oops:

Meine Checkboxen hab ich schon und auch die übrigen Spalten :D

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:

ausblenden 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:
ausblenden 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); //Hier wird der String der angezeigt werden soll übergeben
2: CellText := 'test';  //Zum Testen
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Di 05.04.11 14:13 
Hast du ein Beispiel zur Hand? Ich begreifs nicht :cry:

Das geht auch nicht:
ausblenden Delphi-Quelltext
1:
vst.OnGetText(vst,node,0,ttNormal,'Test');					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 05.04.11 14:42 
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.VSTInitNode(Sender: TBaseVirtualTree; ParentNode,       //Checkbox anzeigen lassen
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
begin
if Sender.GetNodeLevel(Node) = 0 // nur oberste Ebene
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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!