![]() |
Combobox anderes Verhalten als in Delphi
Ich habe in Delphi eine TComboBox verwendet, in welche ich z.B. Nummern eingebe.
Die Combobox klappt automatisch auf und wählt den (je nach weite der Eingabe) passensten Eintrag schon aus. Soweit so gut. Ich habe dann eine Prüfung eingebaut, das wenn der eingegebene Text zu keinem Eintrag in der Combobox passt, dieser um 1 Zeichen (das letzte eingegebene) gekürzt wird. Jetzt stehe ich wie der Ochse vorm Berg: Problem in Lazarus ist jedoch, das er immer sagt das der eingegebene Text nicht passt, da er immer nur die eingegebenen Zeichen prüft, nicht aber die "Vorauswahl". Dadurch lösche ich natürlich immer die komplette Eingabe und man hängt quasi fest.
Delphi-Quellcode:
Jemand eine Idee wie man das in Lazarus hin bekommt? Die Combobox scheint sich anders zu verhalten.
procedure TTools.ChooseFChange(Sender: TObject);
var LandD, IPD, IPT, DeviceD, puffer : string; i : integer; begin if (ChooseF.Text <> '') and (ChooseF.Items.IndexOf(ChooseF.Text) <> -1) then begin //Bedingungen wenn der Text passt. end else begin //Wenn der Text nicht passt puffer := choosef.Text; choosef.Text := ''; for i := 1 to length(puffer) - 1 do begin Choosef.Text := Choosef.Text + puffer[i]; end; choosef.SelStart := length(choosef.text); end; end; |
AW: Combobox anderes Verhalten als in Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
Stehe da gerade auf dem Schlauch. Es soll durchaus das OnChange Event verwendet werden, hab das oben nicht erwähnt, sorry.
Und dort bekomme ich die von dir aufgeführten Werte deiner procedure nicht. Hab es daher so angepasst, funktioniert jedoch auch nicht:
Delphi-Quellcode:
Es bleibt zwar wenigstens das Zeichen stehen, aber die Suche geht spätestens ab dem zweiten Zeichen nicht weiter. Ggf. hilft das Beispiel im anhang aus Delphi, wie es funktionieren sollte.
if Assigned(ChooseF.Items) and (ChooseF.Items.Count > 0) then
begin for i := Length(ChooseF.text) - 1 downto 1 do begin FoundInIndex := ChooseF.Items.IndexOf(ChooseF.text); if FoundInIndex > -1 then begin ShowMessage('Found'); break; end else begin ChooseF.text := Copy(ChooseF.text, 1, i); Choosef.SelStart := length(choosef.text); end; end; end; Bild 1 und 2: Die Eingabe bei vorhandenen Einträgen. Bild 3: Eingabe und mit der letzten Ziffer ("I16x") wurde nichts gefunden und daher wieder um eine Stelle gekürzt ("I16"). |
AW: Combobox anderes Verhalten als in Delphi
Sorry, aber natürlich ist Autocomplete eingeschaltet....
Aber Lazarus arbeitet anders. Delphi: 1. Du tippst Zeichen für Zeichen ein 2. Autocomplete wird ausgeführt 3. Du kannst im Onchange Combobox.text abfragen und dort steht der autom. vervollständigte Text drin => indexof >= -1 4. Du kannst weiter tippen bis die eingestellte maximale Zeichenanzahl (4) erreicht ist und der index größer -1 ist oder er löscht das letzte eingegebene Zeichen Lazarus: 1. Du tippst Zeichen für Zeichen ein 2. Autocomplete wird noch NICHT ausgeführt 3. Du kannst im Onchange Combobox.text zwar abfragen aber dort steht nur der eingetippte Text drin => indexof = -1 4. Er löscht sofort das eingegebene Zeichen => man hat quasi immer ein leeres Textfeld. |
AW: Combobox anderes Verhalten als in Delphi
Was meinst du mit "Weiterentwicklungen"?
Natürlich ist .AutoCompleteText auch gesetzt, von dessen Unterpunkten ich jedoch keinen angefasst habe (True, True, False, True, False). Der Code im ersten Post ist das einzige was greift bzw. darauf Einfluss nimmt. Klar, ohne den Code, funktioniert das mit der Eingabe (ohne das löschen des Zeichens), aber die Entscheidenden Punkte meines vorigen Posts sind ja 2. und 3.! Hast du dir mal im Onchange den Combobox.text ausgeben lassen? Ich bekomme ohne jeglichen anderen Code immer nur das was ich eingegeben habe, nicht aber den "AutoComplete"-Text. Und genau das ist das Problem! In Delphi : OnChange -> Combobox.text = Autocomplete-Text In Lazarus: OnChange -> Combobox.text = Eingegebener-Text |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz