AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi AutoComplete für TMemo, TRichEdit uvm.

AutoComplete für TMemo, TRichEdit uvm.

Ein Thema von Woodman · begonnen am 12. Dez 2008 · letzter Beitrag vom 24. Dez 2009
Antwort Antwort
Seite 3 von 4     123 4   
Benutzerbild von Woodman
Woodman

Registriert seit: 17. Mär 2007
74 Beiträge
 
Delphi 10.1 Berlin Starter
 
#21

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 15. Dez 2008, 19:29
Zitat von himitsu:
Also, mit der letzen Version hab ich bei mir keine Probleme
Ja klar, weil Du das AutoComplete "ausgeschaltet" hast
Delphi-Quellcode:
  Procedure TAutoComplete.EditChange(Sender: TObject);
    Var B: Boolean;

    Begin
      {B := _IsKeyPressed;
      _IsKeyPressed := False;
      If B Then ShowListView Else Hide;
      If Assigned(_OnEditChange) Then _OnEditChange(Sender);}

    End;
Keep
Horst
Delphi 10.1 Berlin Starter unter Windows 10 - 1803
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.280 Beiträge
 
Delphi 10.4 Sydney
 
#22

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 15. Dez 2008, 19:39
Ups, was hab ich denn da vergessen

stümmt, jetzt passiert des doch

OK, heißt also es gibt Probleme mit der Übergabe von Sonderzeichen ... ma gucken


Ach ja, hatte alles in den Edit-Ereignisprozeduren auskommentiert und igendwie funktioniert [Entf] und sowas wie Kopieren/Auschneiden/Einfügen beim Edit dennoch nicht ... hab also noch keine Ahnung warum

[edit] in #17 die Fehler bezüglich der Auskommentierung behoben
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Woodman
Woodman

Registriert seit: 17. Mär 2007
74 Beiträge
 
Delphi 10.1 Berlin Starter
 
#23

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 15. Dez 2008, 19:47
Zitat von himitsu:
...Ach ja, hatte alles in den Edit-Ereignisprozeduren auskommentiert und igendwie funktioniert [Entf] und sowas wie Kopieren/Auschneiden/Einfügen beim Edit dennoch nicht ... hab also noch keine Ahnung warum ...
Das kann ich Dir sagen: Beim TEdit und TRichEdit funktionierts manuell.
Beim TMemo mußt Du noch das Popup-Menu bereinigen oder die ActionList aus meinem Testprogramm wieder zufügen.

Ich bin dann mal weg...
Keep
Horst
Delphi 10.1 Berlin Starter unter Windows 10 - 1803
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.280 Beiträge
 
Delphi 10.4 Sydney
 
#24

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 15. Dez 2008, 19:54
oder irgendwas vom OLE einbinden ... mir fällt einfach nur nimmer ein was das war.

So, das Problem mit den äöüß... liegt nicht an der Zeichenübergabe an das Edit, sonder vermutlich irgendwo an der ListBox-Selektierung ... muß ich nur noch rausfinden was da schiefgeht
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.280 Beiträge
 
Delphi 10.4 Sydney
 
#25

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 18. Dez 2008, 08:51
Zu dem Memo ... ich hab langsam die Beführchtung,
es reicht, wenn man nur die ActionList auf's Formular zieht.

Bei Memo1 hab ich es mal (so wie bei dir) ins Popupmenü eingebunden, aber in Memo2 nicht und dennoch geht dieses dort jetzt auch.



Du hast 'nen Fehler beim Befüllen der ListBox ... es fehlen viele Wörter.
(siehe Anhang > Unbenannt.png und Unbenannt2.png)

"sch" = 4464 wörter, aber bei dir sind es nur 5
"fra" = 655 wörter und bei dir sind's wieder nur 5

Gut, ich laß auch nicht unendlich viele Wörter in der ListView zu, da die Delphi-Version leider ein "klitzekleines" Geschwindigkeitsproblem hat, wenn sie zu voll wird.

Zitat:
// Wichtig: Parent festlegen, sonst gibt's
// einen Laufzeitfehler
ach ja, weißt du auch warum?

Owner = Besitzer des Komponente und das kann alles (jeder nachkomme von TComponent) und nichts (nil) sein.
es ist nur derjenige, welcher sich um die Freigabe der Komponente kümmert (wenn er selber freigegeben wird), falls niemand anderes die Komponente freigibt,

welches eigentlich auch der Programmierer machen könnte:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  AutoComplete1.Free;
  AutoComplete2.Free;
  AutoComplete3.Free;
end;
PS: drum hab ich als Owner auch die Edit-Komponente gewählt, da die Funktion an diese Komponente gebunden ist.

Parent aber ist die Komponente, auf welcher deine Komponente dargestellt wird ... und wenn da nichts angegeben ist, wo soll die ListView dann hin? (sozusagen ohne Leinwand um sich zu Zeichnen)



hab jetzt auch mal mit 'ner Version einer "unsichtbaren" ListView gespielt (ListView ist zwar noch vorhanden, da über sie die Eingabe läuft, aber so klein, daß man sie nicht sieht)

die Eingabe wurde verbessert und einige Fehler ausgemerzt
  • Entf-Taste wird nun unterstützt
  • das Schreiben geht flüssiger
  • Wörter werden nicht mehr verfällscht
  • man kann jetzt eine StringList für mehrere Komponenten(TAutoComplete) verwenden
    - einfach statt 'ner normalen StringList beim Laden TCommonWordList (oder deren Nachfahren) übergeben
  • statt nur TStringList und Nachkommen wird jetzt alles ab TStrings, als Quelle, unterstützt

[add]
Wenn du von statt TEdit TCustomEdit entgegennimmst, werden mehr Komponenten unterstützt.
TEdit macht nur einige Methoden sichtbar, welche es in TCustomEdit noch nicht sind und falls du dann innerhalb deiner Komponente Probleme hast auf bestimmte Methoden zuzugreifen, dann einfach nach TEdit casten.

[edit]merk grad, hab mir irgendwo 'nen Fehler bei der Positionierung der ListView eingebaut ... muß ich mal nachsehn wo der sich versteckt


Beitrag #17: AutoComplete.7z (742 KB) - Source+Exe
Miniaturansicht angehängter Grafiken
unbenannt2_108.png   unbenannt_570.png   demo_110.png  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Woodman
Woodman

Registriert seit: 17. Mär 2007
74 Beiträge
 
Delphi 10.1 Berlin Starter
 
#26

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 18. Dez 2008, 20:02
Zitat von himitsu:
...
Du hast 'nen Fehler beim Befüllen der ListBox ... es fehlen viele Wörter.
(siehe Anhang > Unbenannt.png und Unbenannt2.png)

"sch" = 4464 wörter, aber bei dir sind es nur 5
"fra" = 655 wörter und bei dir sind's wieder nur 5
Das ist in Ordnung, wie Du oben siehst, öffne ich im Memo eine ander Textdatei als im RichEdit.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   AutoComplete1 := TAutoComplete.Create(self,'worte.txt',Memo1);
   AutoComplete2 := TAutoComplete.Create(Form1,'plz.txt',LabeledEdit1);
   AutoComplete3 := TAutoComplete.Create(Form1,'words4.txt',RichEdit1);
   
end;
Zitat von himitsu:
Gut, ich laß auch nicht unendlich viele Wörter in der ListView zu, da die Delphi-Version leider ein "klitzekleines" Geschwindigkeitsproblem hat, wenn sie zu voll wird.
Bei der Option, das AutoComplete nur "anspringt", wenn 3 Zeichen eingetippt sind, gibt es dieses Problem (fast) nicht.
Zitat von himitsu:
Zitat:
// Wichtig: Parent festlegen, sonst gibt's
// einen Laufzeitfehler
ach ja, weißt du auch warum?

Owner = Besitzer des Komponente und das kann alles (jeder nachkomme von TComponent) und nichts (nil) sein.
es ist nur derjenige, welcher sich um die Freigabe der Komponente kümmert (wenn er selber freigegeben wird), falls niemand anderes die Komponente freigibt,

welches eigentlich auch der Programmierer machen könnte:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  AutoComplete1.Free;
  AutoComplete2.Free;
  AutoComplete3.Free;
end;
PS: drum hab ich als Owner auch die Edit-Komponente gewählt, da die Funktion an diese Komponente gebunden ist.

Parent aber ist die Komponente, auf welcher deine Komponente dargestellt wird ... und wenn da nichts angegeben ist, wo soll die ListView dann hin? (sozusagen ohne Leinwand um sich zu Zeichnen)
Das ist ein wichtiger Hinweis und war mir bis jetzt noch nicht bewusst bzw. bekannt:
Der Unterschied Owner <> Parent.
Früher dachte ich, die Kinder gehören den Eltern

Zitat von himitsu:
hab jetzt auch mal mit 'ner Version einer "unsichtbaren" ListView gespielt (ListView ist zwar noch vorhanden, da über sie die Eingabe läuft, aber so klein, daß man sie nicht sieht)
Mhm, muss ich mal mit spielen. Ist etwas gewöhnungsbedürftig, besonders da man nicht weiß, was die Liste noch anbietet.
Zitat von himitsu:
...[edit]merk grad, hab mir irgendwo 'nen Fehler bei der Positionierung der ListView eingebaut ... muß ich mal nachsehn wo der sich versteckt
Jau, denn ich blick jetzt nicht mehr durch
Keep
Horst
Delphi 10.1 Berlin Starter unter Windows 10 - 1803
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.280 Beiträge
 
Delphi 10.4 Sydney
 
#27

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 19. Dez 2008, 08:29
Zitat:
Das ist in Ordnung, wie Du oben siehst, öffne ich im Memo eine ander Textdatei als im RichEdit.
oh man, das Gedächtnis
OK, wenn die Datei kleiner ist, dann wäre das ein guter Grund

Zitat:
Bei der Option, das AutoComplete nur "anspringt", wenn 3 Zeichen eingetippt sind, gibt es dieses Problem (fast) nicht.
bis man dann mal eine schön große Wortliste verwendet...

Zitat:
Früher dachte ich, die Kinder gehören den Eltern
joar, da darf man wohl nicht wortwörtlich übersetzen
Parent = Arbeitsplatz
Owner = Mörder
oder so

Zitat von himitsu:
hab jetzt auch mal mit 'ner Version einer "unsichtbaren" ListView gespielt (ListView ist zwar noch vorhanden, da über sie die Eingabe läuft, aber so klein, daß man sie nicht sieht)
Mhm, muss ich mal mit spielen. Ist etwas gewöhnungsbedürftig, besonders da man nicht weiß, was die Liste noch anbietet.
Zitat von himitsu:
...[edit]merk grad, hab mir irgendwo 'nen Fehler bei der Positionierung der ListView eingebaut ... muß ich mal nachsehn wo der sich versteckt
Jau, denn ich blick jetzt nicht mehr durch [/quote]

Zitat:
Mhm, muss ich mal mit spielen.
Ist etwas gewöhnungsbedürftig, besonders da man nicht weiß, was die Liste noch anbietet.
du könntest die ListView da eventuell sogar weglassen und was Schnelleres verwenden, da bei dir der Input ja über das Memo läuft (bei mir halt über die ListView)

und was die Auswahl betrifft > Cursor-Tasten (hoch und runter), halt alles wie in der ListView und Auswählen mit Enter ... am Ende der begrenzen Liste (500 Einträge in der Demo) mit Enter die Liste erweitern (halt auch wie in der ListView))
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.280 Beiträge
 
Delphi 10.4 Sydney
 
#28

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 20. Dez 2008, 17:44
das mit'm automatischen Positionieren funktioniert jetzt erstmal (auch wenn es mir vom Code her noch nicht gefällt)

und dann gab's noch einige andere Änderungen ... aber k.A. was ich gestern noch alles verbrockt hab

Beitrag #17: AutoComplete.7z (744 KB) - Source+Exe
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.009 Beiträge
 
Delphi 10.3 Rio
 
#29

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 23. Dez 2009, 11:31
Hallo himitsu,

aus einem anderen Thread heraus hattest du mich auf diesen hier aufmerksam gemacht.
Die Idee finde ich sehr gut und wollte das AutoComplete nun auch in mein Projekt übernehmen.

Ich kann auf die Methoden der AutoComplete-Unit zugreifen, aber es wird anscheinend nicht auf mein Edit angewendet.

Meine vllt. dumme Frage:
Wie bekomme ich das "Edit-Hack" auf mein Edit "aktiviert"?

Schon mal Danke für deine Mühen!


Edit: ähhh, sorry, nachfolgend noch meine Bemühungen, damit du nicht orakeln musst...
Delphi-Quellcode:
interface

uses
...AutoComplete;
...
private
AutoComplete1: TAutoComplete;
...
procedure TSearchForm.FormCreate(Sender: TObject);
var
  SL: TStringList; //fuer AutoComplete
begin
  AutoComplete1 := TAutoComplete.Create(Edit1, 'Search_Words.txt');
  SL := TStringList.Create;
  SL.LoadFromFile('Search_Words.txt');
...

procedure TSearchForm.Listbox1DblClick(Sender: TObject);
var
  Edit1text: string;
begin
...
  AutoComplete1.SaveWordsToString(Edit1text);
end;
...
procedure TSearchForm.FormDestroy(Sender: TObject);
begin
  AutoComplete1.SaveWordsToFile('Search_Word.txt');
  AutoComplete1.Free;
end;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.280 Beiträge
 
Delphi 10.4 Sydney
 
#30

Re: AutoComplete für TMemo, TRichEdit uvm.

  Alt 23. Dez 2009, 13:44
Eigentlich sollte dieses schon ausreichen, da das diese Komponente beim TAutoComplete.Create mit dem Edit verbunden wird.

Nur die TStringList (SL) kannst du weglassen, da du die Wörterliste ja schon beim TAutoComplete.Create direkt angibst, aber es sollte dennoch gehn, auch wenn die Datei nochmal in einer unabhängigen Stringliste geladen wurde.

Das Minimum wäre ja dieser Code und das ist soweit auch bei dir vorhanden.
Delphi-Quellcode:
{***** OnCreate *****}
AutoComplete1 := TAutoComplete.Create(Edit1, 'wordlist.txt');

{***** OnDestroy *****}
//If AutoComplete1.WordsChanged Then
// AutoComplete1.SaveWordsToFile('wordlist.txt');
AutoComplete1.Free;

Änderst du eventuell nachträglich noch ein paar Events des Edits?
OnKeyDown, OnKeyUp, OnKeyPress und OnChange des Edits/Memors wird ja von der Komponente überschrieben, da hierrüber auf Tastatureingaben reagiert wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 03:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf