Autor Beitrag
DaGeorge
Hält's aus hier
Beiträge: 7

win 2000, win XP
D7
BeitragVerfasst: Fr 09.12.05 09:26 
Hallo Alle zusammen,

Ich habe auf einem Formular ein TreeView, ein Editfeld sowie weitere Komponenten.
Der TreeView dient normalerweise zur Navigation (über sein OnChange Ereignis).
Wenn ich in meinem Programm in den "Bearbeitungsmodus" wechsle, wird ein neues Formular über das Mainformular gelegt und nur der TreeView und das Editfeld bleiben sichtbar.
Nun möchte ich, dass man im TreeView kein Eintrag mehr auswählen kann. Problem ist hierbei, dass beim Bearbeiten Einträge hinzu gefügt werden. Also funktioniert TreeView.enable:=false; oder ein Panel darunter nicht.

Weiterhin habe ich folgendes probiert:
Das Bearbeitungsformular über das ganze Hauptformular zu legen und den Bereich des TreeViews transparent zu machen. Dies funktioniert zwar, aber das Programm wird total langsam und ruckelt beim Fenster verschieben. Also nicht akzeptabel.

Meine nächste Idee war ein weiteres Formular mit AlphablendValue:=0 über den TreeView zu legen. Dies funktioniert auch nicht, da man das Hauptformular als Parent angeben muss (damit es immer darüber liegt) und dann die AlphaBlend-Eigenschaften vom Hauptformular übernommen werden.

Ich hoffe hier kann mir jemand helfen.

Gruss
George
petergensfeld
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

Windows Vista 32-Bit
Delphi XE Professional
BeitragVerfasst: Fr 09.12.05 10:16 
Hallo George,

wie wäre es, wenn Du das Ereignis OnEditing des TreeViews abfängst und dort AllowEdit auf False setzt, solange Dein Programm im Bearbeitungsmodus ist?

// EDIT:
Das geht natürlich auch mit OnChanging, OnExpanding und OnCollapsing.

Gruß Dirk
DaGeorge Threadstarter
Hält's aus hier
Beiträge: 7

win 2000, win XP
D7
BeitragVerfasst: Fr 09.12.05 10:41 
Bringt mir leider nichts. Das habe ich schon mit TreeView.readonly:=true verhindert.

Vielleicht habe ich mich nicht ganz klar ausgedrückt. Ich will verhindern, dass der Fokus (also das ausgewählte Node) des TreeView maunell (per Maus oder Tastatur) verändert werden kann.
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: Fr 09.12.05 10:41 
Hallo,
user profile iconDaGeorge hat folgendes geschrieben:
...
Nun möchte ich, dass man im TreeView kein Eintrag mehr auswählen kann. Problem ist hierbei, dass beim Bearbeiten Einträge hinzu gefügt werden. Also funktioniert TreeView.enable:=false;
...

auch wenn enable auf False gesetzt ist können Einträge programmseitig hinzufügt/bearbeitet werden.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
DaGeorge Threadstarter
Hält's aus hier
Beiträge: 7

win 2000, win XP
D7
BeitragVerfasst: Fr 09.12.05 10:53 
user profile iconLannes hat folgendes geschrieben:

auch wenn enable auf False gesetzt ist können Einträge programmseitig hinzufügt/bearbeitet werden.


Stimmt.
Nur dann wird der komplette TreeView gau und man erkennt nicht mehr, wo der Fokus zuletzt war. Und das soll erhalten bleiben.
petergensfeld
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

Windows Vista 32-Bit
Delphi XE Professional
BeitragVerfasst: Fr 09.12.05 11:04 
user profile iconDaGeorge hat folgendes geschrieben:
Vielleicht habe ich mich nicht ganz klar ausgedrückt. Ich will verhindern, dass der Fokus (also das ausgewählte Node) des TreeView maunell (per Maus oder Tastatur) verändert werden kann.

Genau das kannst Du mit dem OnChanging-Event erreichen. Wenn Du AllowChange auf False setzt, ist es für den Benutzer nicht mehr möglich, einen anderen Knoten zu wählen! ReadOnly verhindert dagegen lediglich das Editieren.

Gruß Dirk
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: Fr 09.12.05 11:10 
Hallo,

leg das TreeView auf ein Panel(ohne Border),
im Bearbeitungsmodus enable des Panels auf False setzen, dann werden die TreeView-Einträge nicht grau.
Dann noch Eigenschaft HideSelection des TreeView auf False setzen,
damit man den gewählten Eintrag noch sieht.

//Edit
@user profile iconpetergensfeld:
Dann können aber noch Knoten auf- und zugeklappt werden.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
DaGeorge Threadstarter
Hält's aus hier
Beiträge: 7

win 2000, win XP
D7
BeitragVerfasst: Fr 09.12.05 12:05 
user profile iconpetergensfeld hat folgendes geschrieben:

Genau das kannst Du mit dem OnChanging-Event erreichen. Wenn Du AllowChange auf False setzt, ist es für den Benutzer nicht mehr möglich, einen anderen Knoten zu wählen! ReadOnly verhindert dagegen lediglich das Editieren.

Gruß Dirk



Danke! :beer:

Genau so habe ich mir das gedacht. Nur mit den aufklappbaren Knoten muss ich mir was überlegen.

Ich hab das bisher, wie Lannes es beschrieben hat, mit dem Panel gemacht. Aber dann muss man das panel aktivieren, wenn man den TreeView vom Programmm aus bearbeiten will. Und das wird mit der Zeit zu unübersichtlich… Ist vielleicht nicht ganz sauber programmiert :angel:


Unabhängig hiervon, gibt es eine Komponente, die man wie ich es zu Beginn vorhatte, die durchsichtig ist und über den TreeView (oder andere Komponente) gelegt werden kann und so die Maus abfängt? (Shape hab ich schon ausprobiert, da geht die Maus durch)

Grüsse
George
petergensfeld
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

Windows Vista 32-Bit
Delphi XE Professional
BeitragVerfasst: Fr 09.12.05 12:10 
Zitat:
Nur mit den aufklappbaren Knoten muss ich mir was überlegen.

Schau Dir auch noch OnExpanding und OnCollapsing an!

Zitat:
Ich hab das bisher, wie Lannes es beschrieben hat, mit dem Panel gemacht. [...] Ist vielleicht nicht ganz sauber programmiert.

Sehe ich auch so.

Gruß Dirk
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: Fr 09.12.05 12:57 
Hallo,

user profile iconDaGeorge hat folgendes geschrieben:
...
Aber dann muss man das panel aktivieren, wenn man den TreeView vom Programmm aus bearbeiten will.
...
warum muss man das Panel aktivieren :gruebel: , es kann doch programmseitig alles ausgeführt werden, oder meinst Du mit "vom Programm aus" -"durch den Anwender"-.

user profile iconpetergensfeld hat folgendes geschrieben:

Zitat:
Ich hab das bisher, wie Lannes es beschrieben hat, mit dem Panel gemacht. [...] Ist vielleicht nicht ganz sauber programmiert.

Sehe ich auch so.

Gruß Dirk

na ja, ist Ansichtssache, durch die Nutzung eines Panels bleibt der markierte Eintrag grau hinterlegt und kann nicht durch anklicken eine Bearbeitungsmöglichkeit signalisieren.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
petergensfeld
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

Windows Vista 32-Bit
Delphi XE Professional
BeitragVerfasst: Fr 09.12.05 13:03 
Das Panel ist aber in diesem Fall ein überflüssiges Control, das zweckentfremdet wird. Auch wenn in Zeiten unserer P4-Maschinen mit GB-Speicher das Thema Resourcenschonung keine allzu große Rolle mehr spielt, finde ich es einfach sauberer. Bzgl. der Farbe - wer's mag kann die per OwnerDraw natürlich auch noch beliebig anpassen.

Gruß Dirk
DaGeorge Threadstarter
Hält's aus hier
Beiträge: 7

win 2000, win XP
D7
BeitragVerfasst: Fr 09.12.05 13:27 
user profile iconLannes hat folgendes geschrieben:

warum muss man das Panel aktivieren :gruebel: , es kann doch programmseitig alles ausgeführt werden, oder meinst Du mit "vom Programm aus" -"durch den Anwender"-.


:autsch: :autsch:
Aus einem mir gerade unerklärlichen Grund rufe ich im Berabeiten treeview.setfocus auf :oops:
Daher musste ich immer das Panel aktivieren.

Daher nochmal Danke!
George