Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Automatische Vervollständigung bei Eingabe? (https://www.delphipraxis.net/9453-automatische-vervollstaendigung-bei-eingabe.html)

eddy 27. Sep 2003 17:41

Re: Automatische Vervollständigung bei Eingabe?
 
Hallo mandumoal,

AutoFill für ComboBox, das hatten wir schon: DP Suche AutoFill für Combobox

Wenn das nicht weiterhilft, dann vielleicht das:
Delphi-Quellcode:
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.
Ist mein letzter Bearbeitungsstand und funktioniert.

mfg
eddy

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

mandumoal 27. Sep 2003 18:43

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

Alexander 28. Sep 2003 09:06

Re: Automatische Vervollständigung bei Eingabe?
 
Jupp mittels Stream oder wenn es nicht all zu viele sind mittels INI-DAtei

Phoenix 28. Sep 2003 09:23

Re: Automatische Vervollständigung bei Eingabe?
 
Zitat:

Zitat von mandumoal
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?

Hrm. Also meine erste Idee wäre die Registry unter HKCU.
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.

mandumoal 28. Sep 2003 14:04

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

Christian Seehase 28. Sep 2003 14:06

Re: Automatische Vervollständigung bei Eingabe?
 
Moin mandumoal,

zum Thema Ini schau mal in der Hilfe nach TIniFile.
Eine Suche hier nach Hier im Forum suchenTIniFile sollte auch einige Fundstellen bringen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 Uhr.
Seite 2 von 2     12   

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