AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Combobox anderes Verhalten als in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Combobox anderes Verhalten als in Delphi

Ein Thema von Moombas · begonnen am 4. Nov 2019 · letzter Beitrag vom 6. Nov 2019
Antwort Antwort
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#1

Combobox anderes Verhalten als in Delphi

  Alt 4. Nov 2019, 14:21
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:
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;
Jemand eine Idee wie man das in Lazarus hin bekommt? Die Combobox scheint sich anders zu verhalten.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 4. Nov 2019 um 14:38 Uhr)
  Mit Zitat antworten Zitat
Alt 4. Nov 2019, 16:14     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Combobox anderes Verhalten als in Delphi

  Alt 5. Nov 2019, 08:12
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:
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;
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.
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").
Miniaturansicht angehängter Grafiken
beispiel.jpg  
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 5. Nov 2019 um 08:20 Uhr)
  Mit Zitat antworten Zitat
Alt 6. Nov 2019, 01:06     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Combobox anderes Verhalten als in Delphi

  Alt 6. Nov 2019, 09:41
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Alt 6. Nov 2019, 14:16     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Combobox anderes Verhalten als in Delphi

  Alt 6. Nov 2019, 15:26
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
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 6. Nov 2019 um 15:46 Uhr)
  Mit Zitat antworten Zitat
Alt 6. Nov 2019, 19:31     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz