Autor |
Beitrag |
lexmy3
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mi 04.01.06 13:38
Malzeit,
So mit Drag&Drop innerhalb der CheckListBox habe ich es heute schon geschafft
www.delphi-forum.de/...r+Dragamp_53942.html
aber aus der CheckListBox ins Edit-Feld zum Bearbeiten der Items nicht und finde nix hilfreiches hier.
Hat einer vieleicht nen Tip für mich.
Oder eine Idee wie ich die Zeilen der CheckListbox wärend der Laufzeit bearbeiten kann.
Mfg
Lexmy3[dp]
Zuletzt bearbeitet von lexmy3 am Mo 09.01.06 10:30, insgesamt 2-mal bearbeitet
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.01.06 13:50
Moin!
Das mit den D&D ist ja ´n nettes Feature, aber meinst du nicht, dass ein Kontextmenü (R-Klick auf den Eintrag in der Box) mit der Option "Edit" oder "Bearbeiten" oder was auch immer, intuitiver ist?
cu
Narses
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mi 04.01.06 13:55
Narses hat folgendes geschrieben: | Moin!
Das mit den D&D ist ja ´n nettes Feature, aber meinst du nicht, dass ein Kontextmenü (R-Klick auf den Eintrag in der Box) mit der Option "Edit" oder "Bearbeiten" oder was auch immer, intuitiver ist?
cu
Narses |
Sehr gerne wenn du mich dahin lotzen kannst/willst, dann wäre es richtig gut!!!
Also meine ursprüngliche Idee war die Zeilen in der CheckListBox bearbeiten zu konnen. Und ich weiß nicht wie, deswegen kamm ich auf die Idee diese erst ins Edit zu zihen um dort zu bearbeiten.
Bin für alle Vorschläge offen!!
mfg
Lexmy3
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.01.06 14:00
Moin!
Ich kann´s ja mal versuchen.
Aaalso: Ein Popup-Menü auf´s Form ziehen, einen Punkt "Bearbeiten" darin anlegen, der Eigenschaft .Popup der Listbox dieses Popup zuweisen und das Projekt erstmal testweise starten. Jetzt sollte mit einem Rechtsklick in der Listbox das Menü mit dem (einzigen) Befehl "Bearbeiten" sehen.
Handshake - bis hierher alles fit?
cu
Narses
|
|
frank-wob
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 04.01.06 14:01
Hier eine ganz einfache Möglichkeit....
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.ListBox1Click(Sender: TObject); begin edit1.text:=Listbox1.Items[ListBox1.ItemIndex]; end;
procedure TForm1.Edit1Change(Sender: TObject); begin ListBox1.Items[ListBox1.ItemIndex]:=Edit1.Text; end; |
Du wirst wohl das passende für dich raus machen können
Gruß Frank
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.01.06 14:05
Moin!
Geht natürlich auch so; ich hätte in meinem Ansatz aber das Edit-Feld "gespart" und ein InputQuery oder - je nach Einsatzzweck - einen weiteren Dialog genommen.
Wo willst du weiter machen?
cu
Narses
|
|
frank-wob
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 04.01.06 14:10
Die Methoden bleiben ja die gleichen. Egal ob der Text aus einer InputQuery oder einem TEdit kommen. Über Kontext Menü wäre sicherlich eleganter. Kommt aber auch darauf an was er machen möchte. Will er viele Einträge schnell ändern, hat er mit einem Klick den Text im Editfeld.
Gruß Frank
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mi 04.01.06 14:28
Narses hat folgendes geschrieben: | Moin!
Geht natürlich auch so; ich hätte in meinem Ansatz aber das Edit-Feld "gespart" und ein InputQuery oder - je nach Einsatzzweck - einen weiteren Dialog genommen.
Wo willst du weiter machen?
cu
Narses |
Hey,
bis jetzt habe ich deinen Vorschlag umgesetzt und es sieht gut aus. Jetzt muss ich nur unter Bearbeiten die einzelne Zeilen edetieren können.
Also mit Popup habe ich noch nix gemacht!!
So denn??
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mi 04.01.06 14:42
frank-wob hat folgendes geschrieben: | Hier eine ganz einfache Möglichkeit....
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.ListBox1Click(Sender: TObject); begin edit1.text:=Listbox1.Items[ListBox1.ItemIndex]; end;
procedure TForm1.Edit1Change(Sender: TObject); begin ListBox1.Items[ListBox1.ItemIndex]:=Edit1.Text; end; |
Du wirst wohl das passende für dich raus machen können
Gruß Frank |
Hey,
dein Vorschlag ist auch sehr gut und vorallem Schnell. Danke für prompte Reaktion
Jedoch den anderen Vorschlag finde ich auch eleganter.
So denn ich warte auf weitere Anweisungen vom Narses!!!
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.01.06 15:10
Moin!
Also dann: du mußt jetzt noch dafür sorgen, dass mit dem R-Klick auch das passende Element ausgewählt wird. Das geht so (entsprechendes der ListBox Ereignis anlegen):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.ListBox1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); var i: Integer; begin i := ListBox1.ItemAtPos(MousePos,TRUE); if (i > -1) then begin ListBox1.ItemIndex := i; ListBox1Click(Sender); end else i := ListBox1.ItemIndex; Handled := FALSE; end; |
Damit kannst du nun davon ausgehen, dass beim Anklicken der Aktion "Bearbeiten" im Kontextmenü auch das "richtige" Item ausgewählt ist (vorausgesetzt es sind Items drin; entsprechende Fehlerprüfungen sind natürlich noch selbst zu leisten).
Jetzt zu der Aktion selbst: Doppelklick auf dem Befehl "Bearbeiten" (im Popupmenü-Editor), damit ein Ereignishandler erstellt wird. Darin dann z.B. sowas machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Bearbeiten1Click(Sender: TObject); var Eingabe: String; begin Eingabe := ListBox1.Items.Strings[ListBox1.ItemIndex]; if InputQuery('Eintrag bearbeiten','Neuer Text: ',Eingabe) then ListBox1.Items.Strings[ListBox1.ItemIndex] := Eingabe; end; |
Soweit klar?
cu
Narses
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mi 04.01.06 15:24
Und wie lege ich die Procedure ContextPopup an???
bzw wo gibt es diese??
Ich habe D5.!!!
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.01.06 15:29
Moin!
Listbox auswählen, im ObjectInspector auf Ereignisse, Doppelklick auf ContextPopup.
cu
Narses
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mi 04.01.06 15:44
Ok habe alles gemacht. Und es funktioniert auch.
Doch es kommt eine Meldung: [Hinweis] Unit2.pas(222): Auf 'i' zugewiesener Wert wird niemals benutzt
Supper, jedoch dieses Zusatz Fenster ist einwenig zu klein für meine Einträge. Kann mann dieses anpassen??
Mfg
Lexmy3
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.01.06 15:55
Moin!
lexmy3 hat folgendes geschrieben: | Doch es kommt eine Meldung: [Hinweis] Unit2.pas(222): Auf 'i' zugewiesener Wert wird niemals benutzt |
Ja, das liegt daran, dass ich dir ein allgemeineren Ansatz gegeben habe, als minimal nötig wäre. Wenn du mit dem Item in der Prozedur, die das Kontextmenü öffnet, nix weiter machen willst (du könntest z.B. vorher die Befehle des Kontextmenüs abhängig vom aktuell ausgewählten Item de/aktivieren, oder sogar das Öffnen des Kontextmenüs selbst unterbinden -> Handled := TRUE;), dann lösch einfach die Zeile, die in der Warnung angegeben ist.
lexmy3 hat folgendes geschrieben: | Supper, jedoch dieses Zusatz Fenster ist einwenig zu klein für meine Einträge. Kann mann dieses anpassen?? |
Nein, das ist praktisch in den Befehl InputQuery eingebaut. Erstell einfach ein weiteres Formular, dass genau auf deine "Bedürfnisse" angepasst ist, wenn dir das so zu knapp ist.
cu
Narses
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mi 04.01.06 16:11
Wofür ist dieser Code Verantwortlich??
CheckListBoxGeneralClick(Sender); // ggfs. Aktionen beim (normalen) Anklicken nachholen (wg. Änderung der Markierung)
Weil Jetzt kommt dies??
[Fehler] Unit2.pas(220): Undefinierter Bezeichner: 'CheckListBoxGeneralClick'
Mfg
Lexmy3
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.01.06 16:33
Moin!
lexmy3 hat folgendes geschrieben: | Wofür ist dieser Code Verantwortlich??
Delphi-Quelltext 1:
| CheckListBoxGeneralClick(Sender); |
Weil Jetzt kommt dies??
Quelltext 1:
| [Fehler] Unit2.pas(220): Undefinierter Bezeichner: 'CheckListBoxGeneralClick' | |
OK, die "Langversion"...
Der "Code" ist der Aufruf der normalen OnClick-Prozedur, weil du per .ItemIndex := i ja praktisch ein neues Item auswählst. Möglicherweise sollen aber beim Auswählen von Items per Mausklick noch Aktionen ablaufen, da aber das Beschreiben von .ItemIndex nicht das Ereignis auslöst, kannst du es hier sozusagen manuell nachholen.
Soweit klar?
cu
Narses
PS: Könntest du den Titel des Topics dem jetzt eher komplett anderen Verlauf der Diskussion etwas anpassen?  Damit würdest du "kommenden Generationen von DF-Lesern" deutlich die Suche erleichtern...  Danke.
PPS: Ich will ja nicht rumnerven, aber was hälst du von "Listboxeinträge per Kontextmenü bearbeiten" als Titel? 
|
|