Autor Beitrag
Stoffel1984
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Do 20.02.03 21:47 
Hallo
ich habe in meiner ComoBox verschiedene Strings eingetragen.
Wenn ich nun in dieser ComboBox die Anfangsbuchstaben eines Items
eingebe bekomme ich den Rest des Wortes markiert. Soweit alles kein Problem. Nur, wie bestätige ich dies nun? Im Internet Explorer beispielsweise drücke ich auch Return und der Text ist ausgewählt.
Noch etwas genauer:
Also ich gebe vom string 'Hallo' nur 'Ha' ein und 'llo' ist dann markiert.
Wie bekomme ich es hin dass der Cursor am Ende steht und das wort nicht mehr markiert ist?

Ich hoffei ch habs verständlich erklärt!

Vielen Dank für eure Hilfe!

Stoffel
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 20.02.03 21:52 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  if Ord(key) = VK_Return then
  begin
    ComboBox1.SelLength:=0;
    ComboBox1.SelStart:=Length(ComboBox1.Text);
  end;
end;


Hoffe, ich habe das Problem richtig verstanden.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Do 20.02.03 21:59 
Hey super!
Vielen vielen Dank!

Wenn es dir nicht zuviel Arbeit ist, könntest du mir erklären was
da gemaht wird? Bin noch am Delphi lernen, deshalb.
Wäre nett.

Vielen Dank!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 20.02.03 22:27 
Finde ich gut, dass Du auch nach der Bedeutung des Quelltextes fragst und nicht nur paste-and-copy machst!

Also:
Das OnKeyPress-Ereignis wird immer dann ausgelöst, wenn eine Taste in der ComboBox betätigt wurde. Es gibt dem Benutzer mit "Key" das Zeichen der Taste, die gedrückt wurde. Bei Tasten wie Return oder Backspace sind das irgendwelche Steuerzeichen.

Aber wir brauchen gar nicht das Zeichen an sich, sondern die Nummer dieses Zeichens in der Zeichentabelle. Ord(Key) ermittelt diese Nummer. Wenn diese Nummer gleich der Nummer der Eingabetaste in der Zeichentabelle (VK_Return ist eine Systemkonstante vom Typ Integer, das VK steht für Virtual Keycode) ist, wissen wir, dass der Benutzer die Eingabetaste betätigt hat.
Mit ComboBox1.SelLength:=0 setzen wir die Länge der Markierung auf Null. Es ist keinerlei Text mehr markiert. Mit ComboBox1.SelStart:=Length(ComboBox1.Text) setzen wir nun noch die Cursorposition ans Ende.

Allgemein ist die Verwendung von SelStart und SelLength folgende: SelStart gibt den Anfang der Markierung an und SelLength, wieviele Zeichen nach diesem Anfang markiert sein sollen. Ist SelLength=0, setzt man mit SelStart die Cursorposition.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Do 20.02.03 22:39 
Nochmals vielen Dank für deine Erklärung, du solltest Lehrer werden und nicht Physiker ;)

Wenn ich dich nochmal nerven darf hab ich noch ne etwas schwerere Frage :D

Ich habe folgenden Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TKundendaten.combo_firmennameKeyPress(Sender: TObject;
  var Key: Char);
begin
  if Ord(key) = VK_Return then
  begin
    combo_firmenname.SelLength:=0;
    combo_firmenname.SelStart:=Length(combo_firmenname.Text);
    with table1 do
    begin
      setkey;
      locate('Firmenname',combo_firmenname.text,[lopartialkey]);
    end;
  end;
end;


Kannst du mir mal sagen wo hier der Fehler ist?!
Hab das gleiche schon bei OnChange stehen und da funktioniert das.
comboBox.Create(self); geht nicht. :cry:

Sorry für die vielen Fragen.......

Gruß,

Stoffel
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 20.02.03 23:12 
Zitat:
Nochmals vielen Dank für deine Erklärung, du solltest Lehrer werden und nicht Physiker
Danke! Aber als Lehrer müsste ich Schülern Physik erklären, die das gar nicht wissen wollen und das fände ich dann ziemlich frustrierend!

Zitat:
Wenn ich dich nochmal nerven darf hab ich noch ne etwas schwerere Frage
Hm, ja, aber generell sollte für eine neue Frage immer ein neuer Thread eröffnet werden.

Was Deine Frage angeht: ohne genaueres über das Programm zu wissen, kann ich da wenig zu sagen. Es ist möglich, dass sich OnChange und OnKeyPress gegenseitig blockieren.

Und was hat es mit dem Create(self) auf sich?

Zitat:
Sorry für die vielen Fragen.......
Kein Problem! Dafür sind wir ja hier!

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Do 20.02.03 23:41 
Das Programm soll ohne DBEdit, DBCombos Daten aus einer Tabelle lesen. Bei Eingabe eines Kunden in die Combobox soll in einem Edit Feld die Kundennummer angezeigt werden. Wenn ich die div. Items der Comobox auswähle geht alles problemlos.
Gebe ich widerrum den Itemtext "manuell" in die Combobox ein (deshalb auch die Frage nach der Return-Taste) funktioniert das nicht.
Das mit dem Create war mein Fehler. Sollte natürlich combobox.change(self) heissen. Sorry


Gruß,

Stoffel
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 21.02.03 12:20 
Ach, jetzt weiß ich woran es liegt, hätte ich eigentlich schon früher drauf kommen müssen:

Wenn das OnKeyPress-Ereignis ausgelöst wird, steht der gedrückte Buchstabe noch gar nicht in ComboBox1.Text. Der Code:
ausblenden Quelltext
1:
2:
3:
4:
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  edit1.text:=ComboBox1.Text;
end;
lässt in edit1.text also immer den Text ohne den gedrückten Buchstaben erscheinen.

Folglich musst Du Deine Abfrage auch noch ergänzen:
ausblenden Quelltext
1:
locate('Firmenname',combo_firmenname.text+key,[lopartialkey]);					


Habe ich jetzt nicht getestet, sollte aber funktionieren. Aber mir ist aufgefallen, dass Du diesen Code gar nicht im OnKeyPress-Ereignis brauchst: sobald die ComboBox den Text ergänzt, wird das OnChange-Ereignis ausgelöst. Diesen Code noch einmal ins OnKeyPress-Ereignis zu setzen, ist also überflüssig.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".