Autor Beitrag
theevilworm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: Di 12.01.10 13:02 
Hallo,

ich habe ein kleines Problem und die Delphi-Hilfe hat mir gar nicht geholfen. Ich benutze Delphi 7.

Ich habe auf einem Formular eine ComboBox mit ein paar Items drin, und einen Button. Beim Klick auf den Button soll das momentan ausgewähle Item gelöscht werden.
Dazu habe ich mir die Delphihilfe angeguckt und bin auf folgenden Hilfe-Artikel gestoßen:

Zitat:

Die Methode Delete löscht den String mit dem angegebenen Index.

Delphi-Syntax:

procedure Delete(Index: Integer); override;

C++ Syntax:

virtual void __fastcall Delete(int Index);

Beschreibung

Mit Delete können Sie einen bestimmten String aus der Liste löschen. Wenn dem String ein Objekt zugeordnet ist, wird auch die Referenz auf das Objekt entfernt. Index ist die Position des Strings in der Dropdown-Liste, wobei 0 der erste String ist, 1 der zweite usw.


Also habe ich in die OnClick-Prozedur meines Buttons geschrieben:

ausblenden Delphi-Quelltext
1:
Delete(ComboBox1.Items[i]);  //i ist dann mein gewünschtes Item					

Das gibt mir den Fehler "Nicht genug wirkliche Parameter". In der Hilfe steht aber kein Hinweis, wie die Syntax korrekt lautet. Auch als ich override; ergänzt habe, funktionierte es nicht. Wie schreibe ich das richtig?

Profisorisch habe ich mir dann geholfen mit:
ausblenden Delphi-Quelltext
1:
ComboBox1.DeleteSelected;					


Mein Problem hier: Wenn ich auf den Button klicke, passiert nichts! Erst wenn ich mit dem Mauszeiger über die ComboBox fahre, wird das Item gelöscht. Es soll aber sofort bei Klick auf den Button gelöscht werden! Wie mache ich das?

Vielen Dank im Vorraus, und sorry für zwei Fragen, aber ich fand die so ähnlich, dass ich nicht zwei Threads dafür aufmachen wollte.
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Di 12.01.10 13:35 
ausblenden Delphi-Quelltext
1:
ComboBox.Items.Delete(i);					
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Di 12.01.10 13:36 
user profile icontheevilworm hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
Delete(ComboBox1.Items[i]);  //i ist dann mein gewünschtes Item					



So wäre es richtig:
ausblenden Delphi-Quelltext
1:
  ComboBox1.Items.Delete(i);					
theevilworm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: Di 12.01.10 13:48 
Wow, vielen Dank!!

Jetzt bräuchte ich noch jemanden, der mir erklärt, warum bei DeleteSelected das Item erst aus der Box gelöscht wird, wenn man mit dem Mauszeiger drüber fährt.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 12.01.10 14:00 
Das ist normalerweise nicht der Fall. Muss an deinem Quellcode liegen.
theevilworm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: Di 12.01.10 14:09 
Okay, dann hier der relevante Quellcode:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm2.Button1Click(Sender: TObject);
begin
If schlaegertypen<StrToInt(label4.caption) Then
  Showmessage ('Du hast nicht genügend Schlägertypen!')
Else
  begin
  einnahmen:=einnahmen+StrToInt(label2.Caption);
  ComboSchutzgeld.DeleteSelected;
  label2.caption:='0';
  label4.caption:='0';
  end;

end;


bzw., falls ich noch irgendwo anders einen Fehler gemacht habe, der gesamte Quellcode:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
procedure TForm2.ComboSchutzgeldChange(Sender: TObject);

begin
If comboschutzgeld.text='Pizzeria "Italia"' Then
  begin
  label2.caption:='800';
  label4.caption:='2';
  end;

If comboschutzgeld.text='Eiscafé "Venedig"' Then
  begin
  label2.caption:='1200';
  label4.caption:='4';
  end;

If comboschutzgeld.text='Supermarkt "Billig"' Then
  begin
  label2.caption:='1600';
  label4.caption:='10';
  end;

If comboschutzgeld.text='Fam. Schulz' Then
  begin
  label2.caption:='950';
  label4.caption:='3';
  end;

If comboschutzgeld.text='Fam. Bernard' Then
  begin
  label2.caption:='1350';
  label4.caption:='5';
  end;

If comboschutzgeld.text='Polizeidienststelle' Then
  begin
  label2.caption:='4500';
  label4.caption:='18';
  end;

end;

procedure TForm2.Button2Click(Sender: TObject);
begin
If geldaufkonto-(SpinEdit1.Value*400)<0 Then
  showmessage ('Du hast nicht genug Geld!')
Else
  begin
  schlaegertypen:=schlaegertypen+SpinEdit1.Value;
  label6.caption:=IntToStr(schlaegertypen);
  geldaufkonto:=geldaufkonto-(SpinEdit1.Value*400);
  end;

end;

procedure TForm2.SpinEdit1Change(Sender: TObject);
begin
label9.caption:=IntToStr(SpinEdit1.Value*400) + ' €';
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
If schlaegertypen<StrToInt(label4.caption) Then
  Showmessage ('Du hast nicht genügend Schlägertypen!')
Else
  begin
  einnahmen:=einnahmen+StrToInt(label2.Caption);
  ComboSchutzgeld.DeleteSelected;
  label2.caption:='0';
  label4.caption:='0';
  end;

end;


Wie ihr seht, versuche ich gerade ein kleines Spiel zu machen, allerdings ohne Grafik, eher eine Art Geldsimulation. Diese Form soll das Schutzgeld-eintreiben behandeln. Dazu habe ich eine Combobox, aus der ich halt verschiedene Opfer wählen kann, und auf Klick auf den Button das Schutzgeld eintreiben kann (nur wenn ich genug Schläger habe). Sobald ich einmal Schutzgeld eingetrieben habe, muss das Opfer natürlich aus der Liste entfernt werden.

ausblenden Delphi-Quelltext
1:
2:
  label2.caption:='0';
  label4.caption:='0';

Das habe ich hinzugefügt, weil durch den Bug, dass man erst mit dem Zeiger über die combobox fahren muss, unendlich oft Schutzgeld eingetrieben werden konnte, indem man schnell auf auf den Button klickt.