AGB  ·  Datenschutz  ·  Impressum  







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

Allgemeine Frage zu Zuweisungen von Instanzen

Ein Thema von guidobrose · begonnen am 14. Jun 2007 · letzter Beitrag vom 15. Jun 2007
 
guidobrose
(Gast)

n/a Beiträge
 
#8

Re: Allgemeine Frage zu Zuweisungen von Instanzen

  Alt 14. Jun 2007, 14:45
Danke für die Infos bisher

@Hawkeye: Nein, da verschwende ich keinen Gedanken daran, weil mir die Combobox nicht gefällt. Die Daten, mit denen mein Autovervollständigen arbeiten soll werden aus einem StringGrid kommen, das aus einer Datenbank gefüllt wird.

Ich habe jetzt mal was probiert, was sogar (weitgehend) funktioniert, aber noch Fragen bei mir aufwirft.

Delphi-Quellcode:
type

  TXTEdit = class(TEdit)
  private
    FAutocomplete: Boolean;
    FBAutocomplete: Boolean;
    FSearchList: TStrings;
    //FOnAutocomplete: TXTAutocompleteEvent;
  protected
    procedure DoAutocomplete;
    procedure CMChanged(var Message: TMessage); message CM_CHANGED;
  public
    constructor Create(AOwner: TComponent);Override;
    destructor Destroy; override;
    property Autocomplete: Boolean read FAutocomplete write FAutocomplete default False;
    //property OnAutocomplete: TXTAutocompleteEvent read FOnAutocomplete write FOnAutocomplete;
    property Searchlist: TStrings read FSearchlist write FSearchlist;
  end;

  TForm3 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    Edit: TXTEdit;
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

constructor TXTEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FSearchlist:=TStrings.Create;
end;

destructor TXTEdit.Destroy;
begin
  FSearchlist.Free;
  inherited Destroy;
end;

procedure TXTEdit.DoAutocomplete;
var I, StartPos: Integer;
begin
  if assigned(FSearchlist) then
  begin
    for I:=0 to FSearchlist.Count-1 do
    begin
      if (Text='') or (LowerCase(FSearchlist.Strings[I])=LowerCase(Text)) then
      begin
// if assigned(FOnAutocomplete) then
// OnAutocomplete(I);
        Exit;
      end;
      if StrLComp(PChar(LowerCase(FSearchlist.Strings[I])), PChar(LowerCase(Text)),
        Length(Text)) = 0 then
      begin
        StartPos := Length(Text);
        Text := Text + Copy(FSearchlist.Strings[I], StartPos + 1, Length(FSearchlist.Strings[I]));
        SelStart := StartPos;
        SelLength := Length(Text) - StartPos;
// if assigned(FOnAutocomplete) then
// OnAutocomplete(I);
        Exit;
      end;
    end;
  end;
end;

procedure TXTEdit.CMChanged(var Message: TMessage);
begin
  if FAutocomplete then
    DoAutocomplete;
  inherited;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  Edit:=TXTEdit.Create(self);
  Edit.Parent:=Form3;
  Edit.Searchlist:=Listbox1.Items;
end;

procedure TForm3.FormDestroy(Sender: TObject);
begin
  Edit.Searchlist:=nil; //Warum brauche ich das???
end;

end.
Wenn ich die Zeile in FormDestroy nicht einfüge, dann kommt es zu einer ungültigen Zeigeroperation. Warum?
  Mit Zitat antworten Zitat
 


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 21:11 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