![]() |
Automatische Vervollständigung bei Eingabe?
Hallo!
Weiss jemand wie ich eine Automatische Vervollständigung bei einer Eingabe realisieren kann? Ich meine zum Beispiel in einem Edit oder ComboBox wenn mann 'Ha' eingibt, dass dann zum Beispiel dasteht 'Hallo' und der Cursor hinter 'Ha' bleibt und bei Eingabe eines ls dann dasteht 'Hallo' und so weiter..... So wie zum Beispiel bei MS Outlook Express in der 'an:'-zeile wenn man einen Anfangsbuchstaben einer Kontaktperson eingibt. Gibt es da eventuell eine Kompo oder so..? mfg mandumoal |
Re: Automatische Vervollständigung bei Eingabe?
Hi,
dir ist klar, dass die Daten hinterlegt werden müssen, oder? Aber als kleiner Tip: Die Combobox kann das, spiel mal ein wenig mit dem Style (siehe OI) herum |
Re: Automatische Vervollständigung bei Eingabe?
Liste der Anhänge anzeigen (Anzahl: 1)
Du packst eine TComboBox aufs Form, setzt den Style auf csSimple und die Items StringListe füllst Du mit den Auto-Optionen.
Demo im Anhang. ...:cat:... |
Re: Automatische Vervollständigung bei Eingabe?
hi!
Das was die ComboBox kann ist zwar fast gut aber ich will nicht das sie sich bei der vervollständigung aufmacht! und außerdem kann man nichts eigeben was nicht exsistiert! Zitat:
mfg mandumoal |
Re: Automatische Vervollständigung bei Eingabe?
Den Style musst Du auf csSimple setzen, dann geht es genau so, wie Du es willst. Siehe Demo :!:
...:cat:... |
Re: Automatische Vervollständigung bei Eingabe?
Hi sakura!
Bei deiner Demo passiert bei mir garnichts wenn ich zum beispiel dre,ei,zwe oder so eingeb! liegt das vielleicht daran, dass er die unit variants nicht gefunden hat und iich sie löschen musste? mfg mandumoal |
Re: Automatische Vervollständigung bei Eingabe?
Nein daran sollte es nicht liegen, hast du auch eins statt 1 eingeben? :mrgreen:
Und steht auch was in den Items bei dir drinne? |
Re: Automatische Vervollständigung bei Eingabe?
Zitat:
In guter alter Handarbeit hab ich das schonmal erledigt. Der zu ergenzende Text stamm in dem fall aus einer Tabelle, aber das kann man sich ja umstellen wie mans braucht.
Delphi-Quellcode:
Das einzigste was ich nicht hinbekommen habe war das der Cursor hinten am Text blinkte. Aber das ist reine Optik.
procedure TForm1.Edit1Change(Sender: TObject);
var name1 :String; i : Integer; begin name1 := Edit1.Text; i := Length(name1); if i > 0 then begin if Table.Locate('Name',VarArrayOf([name1]),[loPartialKey]) then //oder eine andere Quelle begin Edit1.Text := Table1.FieldbyName('Name').asString; i := Length(name1); Edit1.SelStart := i; Edit1.SelLength := length(Edit1.Text)-1 end; end; end; |
Re: Automatische Vervollständigung bei Eingabe?
Ach ja, Sakuras Bsp. tut bei mir auch nichts. Liegt vieleicht doch an der Delphi-Version.
|
Re: Automatische Vervollständigung bei Eingabe?
Zitat:
|
Re: Automatische Vervollständigung bei Eingabe?
Hallo mandumoal,
AutoFill für ComboBox, das hatten wir schon: ![]() Wenn das nicht weiterhilft, dann vielleicht das:
Delphi-Quellcode:
Ist mein letzter Bearbeitungsstand und funktioniert.
unit ComboBoxAF; //ComboBox AutoFill
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TComboBoxAF = class(TComboBox) private { Private-Deklarationen } FAutoFill : Boolean; function GetAutoFill : Boolean; procedure SetAutoFill(value : Boolean); protected { Protected-Deklarationen } procedure ComboWndProc(var Message: TMessage; ComboWnd: HWnd; ComboProc: Pointer); override; public { Public-Deklarationen } constructor Create(aOwner: TComponent); override; Destructor Destroy; override; published { Published-Deklarationen } property AutoFill : Boolean read GetAutoFill write SetAutoFill; end; procedure Register; implementation procedure TComboBoxAF.ComboWndProc(var Message: TMessage; ComboWnd: HWnd; ComboProc: Pointer); var I: Integer; s: String; begin inherited ComboWndProc(Message, ComboWnd, ComboProc); if not FAutoFill then Exit; // first check whether the backspace key was pressed, we do not fill in // in such case! if Message.Msg = WM_CHAR then begin // all characters from 32 (Space) through 127 (Upper ANSI) are matched if TWMChar(Message).CharCode in [$20..$7F] then begin // fill in the rest of the text // save the current text, the user has typed s := Text; // get the first string, matching the text partially I := SendMessage(Handle, CB_FINDSTRING, -1, LongInt(PChar(s))); if I >= 0 then begin // match found! // load matching text, I is the position of the matching string Text := Items.Strings[I]; // select the text beyond the text typed SelStart := Length(s); SelLength := Length(Text) - Length(s); end; end; end; end; function TComboBoxAF.GetAutoFill : Boolean; begin Result := FAutoFill; end; procedure TComboBoxAF.SetAutoFill(value : Boolean); begin FAutoFill := value; end; constructor TComboBoxAF.Create(aOwner: TComponent); begin inherited Create(aOwner); FAutoFill := true; Sorted := true; end; Destructor TComboBoxAF.Destroy; Begin inherited Destroy; End; procedure Register; begin RegisterComponents('Beispiele', [TComboBoxAF]); // end; end. mfg eddy [edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit] |
Re: Automatische Vervollständigung bei Eingabe?
Hi!
Ertsmal Vielen Dank für die Antworten! Ich hab mal die Methode von eddy probiert und bin echt begeistert! Danke! Was wäre denn eurer Meinung nach die Beste Methode um Eintäge in die Combobox die noch nicht exsistieren zu den Items hinzuzufügen? Die Items in einer Datei Speichern, beim Start laden und bei neuer eingabe zu Items hinzufügen und bei Beenden wieder in die Datei speichern (mittels Streams)? Wäre das gut oder schlagt ihr was anderes vor? mfg mandumoal |
Re: Automatische Vervollständigung bei Eingabe?
Jupp mittels Stream oder wenn es nicht all zu viele sind mittels INI-DAtei
|
Re: Automatische Vervollständigung bei Eingabe?
Zitat:
Ich würde eine standard - Liste der möglichen Einträge per .reg - File mitliefern. Das hat meines Erachtens den grossen Vorteil, daß die Einträge auf dem Zielrechner dann User-Spezifisch gespeichert werden. Beispiel: (Ich weiss ja jetzt nicht, was das Ding hinterher machen soll, deswegen einfach mal fiktiv) User 1 benutzt das Ding hauptsächlich um Werte aus dem Fachgebiet Medizin einzugeben, User 2 nur für Computer-Begriffe. Wenn User 2 jetzt 'Kernel' eingeben will, und ihm bei "Ker" dann schon "Kernspintomograph" (war mal ne Eingabe von User 1) vorgeschlagen wird dürfte der ziemlich baff sein :lol: Deswegen neben einem Standard-Wörterbuch nur noch Userspezifisch abspeichern. Die Registry empfiehlt sich hier eben sehr gut. In dem Moment biete ich in meinen Tool übrigens immer die Option "persönliche Einstellungen exportieren" an, die eben den kompletten Registry-Key in eine .reg exportiert. So kann man die sehr einfach sichern und auch mitnehmen. |
Re: Automatische Vervollständigung bei Eingabe?
HI!
Also es soll eigentlich nicht viele verschiedene Bereiche geben(Medizin,Computer...) sondern nur um Mitarbeiter auszuwählen und eben gegebenfalls einen neuen einzugeben oder am anfang gar keine Items zu haben damit die Vervollständigung immer so aussieht wie der Benutzer sie zum ersten Mal eingegeben hat. Wie liese sich denn das mit INI machen? Muss ich einfach nur die Daten per Stream in ner INI speichern und dann wieder auslesen oder was kann man mit ner INI machen was mit zum Beispiel nem TXT nicht geht? (Ach ja: Mit der Registry war zwar ne gute Idee aber ich wollte sowas eigentlich nicht machen weil sich manche aufregen, dass schon jedes kleinste Prog die Registry zukleistert) mfg mandumoal |
Re: Automatische Vervollständigung bei Eingabe?
Moin mandumoal,
zum Thema Ini schau mal in der Hilfe nach TIniFile. Eine Suche hier nach ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 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-2025 by Thomas Breitkreuz