Autor Beitrag
lexmy3
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 04.01.06 13:55 
user profile iconNarses 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

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



BeitragVerfasst: Mi 04.01.06 14:01 
Hier eine ganz einfache Möglichkeit....

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 04.01.06 14:28 
user profile iconNarses 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 04.01.06 14:42 
user profile iconfrank-wob hat folgendes geschrieben:
Hier eine ganz einfache Möglichkeit....

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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):
ausblenden 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); // rausfinden, wohin geklickt wurde
  if (i > -1then begin // ist ein (gültiges) Item
    ListBox1.ItemIndex := i; // dann Markierung verschieben
    ListBox1Click(Sender); // ggfs. Aktionen beim (normalen) Anklicken nachholen (wg. Änderung der Markierung)
  end
  else
    i := ListBox1.ItemIndex; // sonst bleibt das aktuelle Item markiert
  // hier könnten mit dem Item i noch Aktionen laufen
  Handled := FALSE; // Kontextmenü aufrufen, Aktion noch nicht beendet
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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 04.01.06 15:24 
Und wie lege ich die Procedure ContextPopup an???
bzw wo gibt es diese??
Ich habe D5.!!!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.01.06 15:29 
Moin!

Listbox auswählen, im ObjectInspector auf Ereignisse, Doppelklick auf ContextPopup.

cu
Narses
lexmy3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.01.06 15:55 
Moin!

user profile iconlexmy3 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.

user profile iconlexmy3 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.01.06 16:33 
Moin!

user profile iconlexmy3 hat folgendes geschrieben:
Wofür ist dieser Code Verantwortlich??
ausblenden Delphi-Quelltext
1:
CheckListBoxGeneralClick(Sender); // ggfs. Aktionen beim (normalen) Anklicken nachholen (wg. Änderung der Markierung)					

Weil Jetzt kommt dies??
ausblenden Quelltext
1:
[Fehler] Unit2.pas(220): Undefinierter Bezeichner: 'CheckListBoxGeneralClick'					

OK, die "Langversion"... :wink:

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? :wink:

cu
Narses

PS: Könntest du den Titel des Topics dem jetzt eher komplett anderen Verlauf der Diskussion etwas anpassen? :arrow: Damit würdest du "kommenden Generationen von DF-Lesern" deutlich die Suche erleichtern... :wink: Danke.

PPS: Ich will ja nicht rumnerven, aber was hälst du von "Listboxeinträge per Kontextmenü bearbeiten" als Titel? :wink: