Delphi-PRAXiS

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 Suche im Synedit (https://www.delphipraxis.net/148975-suche-im-synedit.html)

pinky1990 11. Mär 2010 19:07


Suche im Synedit
 
Hey Leute
Ich hab bei meinen Programm ein Synedit und wollte eine Suche einbauen die aufgeht wie beim Editor.
Also man drückt Strg+F und die Suche geht auf.
Habe mal den Tactionmanager auf meine Form gezogen und das Popup mit dem Actionmanager verbunde, allerdings ist des Find dan immer Hellgrau und kann nicht angeklickt werden, und Strg+ F geht auch nicht. Wie mach ich so eine Suche und das am besten das Gesuchte Wort im Text noch Orang hinterlegt ist??
Lg

mirage228 11. Mär 2010 19:29

Re: Suche im Synedit
 
Abend!

Was hast Du nun genau vorliegen? Du brauchst prinzipiell folgendes:

Einen Delphi-Referenz durchsuchenTFindDialog, wo der Benutzer den Suchtext eingeben kannst.
Eine Delphi-Referenz durchsuchenTAction-Instanz in Deiner ActionList (bzw. Deinem ActionManager, je nachdem was du vorliegen hast), die beim ShortCut "Strg+F" eingetragen hat und ihrem OnExecute Deine TFindDialog-Instanz aufruft (Delphi-Referenz durchsuchenTFindDialog.Execute). Falls Du der Action kein OnExecute zuorndest, ist das Feld immer grau. Gegebenenfalls könnte es nötig sein im OnUpdate die Action auf .Enabled := True zu schalten, aber im Normallfall nicht...

Viele Grüße

pinky1990 11. Mär 2010 20:06

Re: Suche im Synedit
 
Wow das ging ja Fix.

Oke ich hab jetzt den TFind Dialog hab ne Actionlist auf meiner Form und hab die Actionlist mit dem Button Verbunden wo die Suche sein soll.
Aber wie ich des mach Check ich nicht so :(
lg

mirage228 11. Mär 2010 21:01

Re: Suche im Synedit
 
Naja da Rest steht ja in der Hilfe bzw. in den SynEdit-Beispielen:

- Aufruf des Suchen-Fensters (TFindDialog.Execute)
- Auslesen des Suchtextes aus dem Dialog, falls nicht auf Abbrechen geklickt wurde
- Suchen des Textes im SynEdit (SynEdit.SearchEngine als Ansatzpunkt)

Das Markieren der Treffer dürfte etwas kniffliger sein. Du könntest OnPaintTransient des SynEdit verwenden, dabei könntest Du den Code der OnPaintTransient-Demo ggf. adaptieren und auf deine Bedürfnisse anpassen.

pinky1990 11. Mär 2010 21:11

Re: Suche im Synedit
 
wie es im theoretischen funktioniert weis ihch
aber im praktishen nicht :(

mirage228 11. Mär 2010 21:22

Re: Suche im Synedit
 
Ich würde Dir einen kurzen Beispielcode gerne schreiben, allerdings fehlt mir da die Zeit zu. Je konkreter Deine Frage ist (z.B. "Ich weiß nicht, wie ich den Aufruf des Suchdialoges formulieren soll. So habe ich es gemacht: [...] und es gab diesen Fehler: [...]") desto besser können wir dir helfen :)

pinky1990 11. Mär 2010 21:34

Re: Suche im Synedit
 
Oke dan Probier ich es mal bisschen genauer.
Also ich habe den Opendialog auf meine Form gezogen genauso wie die Actionlist
Dan hab cih bei der Action list des Dings da gemacht des Find wo Shortcut Strg+F zugewiesen ist.
Allerdings weis ich nicht wie ich des mit diesen Onexecute mach und das es nicht mehr Grau hinterlegt ist.
lg

mirage228 11. Mär 2010 21:54

Re: Suche im Synedit
 
Okay. Schritt für Schritt.
  • FindDialog auf das Formular packen
  • In der ActionList Deine Action anlegen
  • Im Objektinspektor unter "Ereignisse" auf "OnExecute" klicken (Alternativ: Doppelklick auf die Action in der ActionList

Ins OnExecute der Action dann:
Delphi-Quellcode:
// Annahmen:
// Dein FindDialog heißt "FindDialog1"
// Dein SynEdit heißt "SynEdit1"
// Falls das anders ist, einfach in diesem Text umbenennen
if FindDialog1.Execute then
begin
  // FindAll gibt die Anzahl der Treffer zurück
  if SynEdit1.SearchEngine.FindAll(FindDialog1.FindText) > 0 then
  begin
    // Hier kannst Du Deiner Kreativität freien Lauf lassen :-P
    // .SearchEngine beinhaltet auch die Resultate der Suche
  end;
end;

pinky1990 11. Mär 2010 22:31

Re: Suche im Synedit
 
Zitat:

Delphi-Quellcode:
begin
  // FindAll gibt die Anzahl der Treffer zurück
  if SynEdit1.SearchEngine.FindAll(FindDialog1.FindText) > 0 then

Was muss hier rein?
Zitat:

Delphi-Quellcode:
begin
    // Hier kannst Du Deiner Kreativität freien Lauf lassen :-P
    // .SearchEngine beinhaltet auch die Resultate der Suche
  end;

und hier?
Sorry falls ich so blöd frag
lg


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr.

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