Oké, even een paar stapjes terug.
Allereerst, de Id waarmee je de ComboBox vult heb je gedeclareerd als String. Een string is níet compatible met een TObject en je kunt hem daar dan ook niet naar typecasten. (Een discussie over dat dit vaak wel lukt valt even buiten dit topic).
Oftewel, er vanuit gaande dat Query.FieldByName('titel').AsString resulteert in een getal, dan zou jouw ComboBoxEnter routine er als volgt uit moeten zien:
Delphi Code:
procedure TForm2.ComboBoxEnter(Sender: TObject);
var
S: String;
Id: Integer;
begin
ComboBox.Clear;
Query.SQL.Text := 'select appname, purchased from purchased UNION ALL select appname, purchased from downloaded order by appname';
Query.Open;
Query.First;
while not Query.Eof do
begin
S := Query.FieldByName('appname').AsString;
Id := Query.FieldByName('purchased').AsInteger;
ComboBox.Items.AddObject(S, TObject(Id));
Query.Next;
end;
Query.Close;
end;
Vervolgens, betreffende het vaststellen van welke Id je nu hebt gekozen in de ComboBox: merk op dat de code in post #7 gebruik maakt van:
- het OnSelect event om te reageren op een gemaakt keuze in de ListBox. In tegenstelling tot het OnChange event dat alleen optreedt bij wijzigingen in de EditBox.
- de ItemIndex die die Index van het gekozen item van de ListBox weergeeft. Die is dus altijd uniek, in tegenstelling tot de verkregen waarde met IndexOf(), want als er dezelfde teksten zijn, dan wordt altijd alleen de eerste gevonden.
Dus jouw code zou er als volgt uit kunnen zien:
Delphi Code:
procedure TForm2.ComboBoxSelect(Sender: TObject);
var
Index: Integer;
Id: Integer;
begin
Index := ComboBox.ItemIndex;
if Index >= 0 then
begin
Id := Integer(ComboBox.Items.Objects[Index]);
Caption := IntToStr(Id);
end;
end;
Bookmarks