AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Editfeld mit Dropdownmenü

Ein Thema von KahPee · begonnen am 24. Dez 2009 · letzter Beitrag vom 24. Dez 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Editfeld mit Dropdownmenü

  Alt 24. Dez 2009, 14:53
if ((EntryValue <> '') and (Pos(EntryValue,Combobox.Text) > 0)) then So habe ich das in meinem Quelltext. Das oben war die falsche Kopie bei einigen rumspielereien.
in Combobox.text (dem Text den jemand in die Combobox eingibt) steht der Suchbegriff. Das soll dann verglichen werden mit den Einträgen, die in der Inidatei zu finden sind. Die Einträge der Ini-datei, die noch passen würden (unter Berücksichtigung der eingegebenen Buchstaben) sollen dann im DropDownmenü angezeigt werden. Es soll durch aus möglich sein einen noch nicht in der Liste vorhandenen String (hier namen) einzugeben.

Das Problem, das Combobox.text immer geleert wird besteht also weiterhin. Warum? Und warum zeigt er mir nicht als möglichen Eintrag am Anfang alle 3 Optionen und wenn ich z.B. "A" tippe "Albert" an?

In der Schleife gibt mir showmessage (war nur zu kontrollzwecken eingebaut) folgendes aus:
3Albert
3Hartmund
3Bert

Genau das ist ja eigentlich auch zu erwarten.

Vielen Dank schon für die Hilfe. Ich hoffe wir finden das Problem noch

mfg KahPee
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Editfeld mit Dropdownmenü

  Alt 24. Dez 2009, 15:03
Wir haben die Parameter bei Pos() vertauscht. So funktioniert's bei mir (soeben getestet):

Delphi-Quellcode:
procedure TForm1.Autocomplete(Combobox: TComboBox);
var
  EntryNum: Integer;
  EntryValue: string;
  statistic: TiniFile;
  i: Integer;
begin
  statistic := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'statistic.ini');
  try
    // read number of entries
    EntryNum := statistic.ReadInteger('Playerlist', 'count', 0);

    Combobox.Items.Clear;
    Combobox.Items.BeginUpdate;

    // add items
    for i := 1 to EntryNum do
    begin
      EntryValue := statistic.ReadString('Playerlist', IntToStr(i), '');

      if ((EntryValue <> '') and (Pos(LowerCase(Combobox.Text), LowerCase(EntryValue)) = 1)) then
      begin
       Combobox.Items.Add(EntryValue);
      end;
    end;

    Combobox.Items.EndUpdate;
  finally
    FreeAndNil(statistic);
  end;
end;
Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Editfeld mit Dropdownmenü

  Alt 24. Dez 2009, 15:18
Das ist schon deutlich besser. Aber:
Im Moment setzt der Cursor immer wieder vor dem ersten Buchstaben an. Das ist natürlich murks. Ich möchte ja das man immer noch einen Namen eingeben kann als wenn es ein normales Editfeld wäre.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Editfeld mit Dropdownmenü

  Alt 24. Dez 2009, 15:19
Dann frickel SelStart und SelLength wieder hinein. Beispielsweise so:

Delphi-Quellcode:
procedure TForm1.Autocomplete(Combobox: TComboBox);
var
  EntryNum: Integer;
  EntryValue: string;
  statistic: TiniFile;
  i: Integer;
  InputLen: integer;
begin
  statistic := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'statistic.ini');
  try
    // read number of entries
    EntryNum := statistic.ReadInteger('Playerlist', 'count', 0);
    InputLen := Length(ComboBox.Text);

    Combobox.Items.Clear;
    Combobox.Items.BeginUpdate;

    // add items
    for i := 1 to EntryNum do
    begin
      EntryValue := statistic.ReadString('Playerlist', IntToStr(i), '');

      if ((EntryValue <> '') and (Pos(LowerCase(Combobox.Text), LowerCase(EntryValue)) = 1)) then
      begin
       Combobox.Items.Add(EntryValue);
      end;
    end;

    Combobox.Items.EndUpdate;

    // get text of the first match
    if Combobox.Items.Count > 0 then
    begin
      ComboBox1.ItemIndex := 0;
      ComboBox1.SelStart := InputLen;
      ComboBox1.SelLength := Length(ComboBox.Text) - InputLen;
    end;
  finally
    FreeAndNil(statistic);
  end;
end;
Ggf. sind noch Anpassungen notwendig.
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Editfeld mit Dropdownmenü

  Alt 24. Dez 2009, 15:23
Super! Auch schön, das der Rest eines Wortes "selected" angezeigt wird. Allerdings gibt es jetzt noch ein klitzekleines Problem.
Wenn man A tippt kommt "albert" (dabei ist "lbert" selected).
Wenn man dann l tippt kommt "albert" (dann ist nichts mehr selected) das ist doof! Wenn ich jetzt zum Beispiel
Alejandro schreiben will Das muss also auch beim zweiten Vorschlag selected sein!
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Editfeld mit Dropdownmenü

  Alt 24. Dez 2009, 15:29
Ich muss nun leider weg. Probiere doch selbst auch mal etwas und lasse dir nicht alles vorkauen.
Wenn du den Code wirklich verstanden hast, dann vermute ich, ist das problemlos machbar. Ich tippe darauf, dass es mit der Groß-/Kleinschreibung zusammenhängt, denn bei der Eingabe von "A" passt glaub alles.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: Editfeld mit Dropdownmenü

  Alt 24. Dez 2009, 15:50
Bis auf den Tippfehler 'memo1' (sollte 'StringList_Vorschlaege' heißen) funktioniert mein Code doch. Inklusive der Tatsache, das der Cursor dort bleibt, wo er ist. Beim letzten Vorschlag wird der Cursor strikt ans Ende des Inputstrings gesetzt, auch wenn er dort vorher gar nicht war.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Editfeld mit Dropdownmenü

  Alt 24. Dez 2009, 23:24
Delphi-Quellcode:
procedure Tform2.Autocomplete(Combobox: TCombobox);
var
  EntryNum, selstart, sellength: Integer;
  EntryValue: string;
  statistic: TiniFile;
  i: Integer;
begin
  statistic := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'statistic.ini');
  try

    EntryNum := statistic.ReadInteger('Playerlist', 'count', 0);

    selstart := ComboBox.SelStart;
    sellength := ComboBox.SelLength;
    Combobox.Items.Clear;
    Combobox.Items.BeginUpdate;
    for i := 1 to EntryNum do
    begin
      EntryValue := statistic.ReadString('Playerlist', IntToStr(i), '');

      if (combobox.Text='') or((EntryValue <> '') and (Pos(LowerCase(Combobox.Text), LowerCase(EntryValue)) = 1)) then
      begin
       Combobox.Items.Add(EntryValue);
      end;
    end;

    Combobox.Items.EndUpdate;
    ComboBox.SelStart := selstart;
    ComboBox.SelLength := sellength;

  finally
    FreeAndNil(statistic);
  end;
end;
Damit klappts

Vielen Dank
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:07 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