// Wenn man mit TFindDialog nur von oben nach unten suchen lassen will,
// hat man mehrere Möglichkeiten, um das kenntlich zu machen.
// Variante 1 graut "UpDown" aus. Man sieht also, dass es theoretisch
// möglich wäre, auch rückwärts zu suchen. Das gefiel mir nicht.
// Variante 2 blendet "UpDown" komplett aus. Da weiß man nicht, in welche
// Richtung überhaupt gesucht wird. Das gefiel mir auch nicht.
// Also habe ich die Prozedur "HideUp" erstellt, welche nur die
// Richtung "nach unten" anzeigt. Der Haken war, dass bei der Direkthilfe
// immernoch beide Möglichkeiten angezeigt werden. Deswegen blende ich
// dann noch den Hilfebutton aus.


// Getestet mit D4 unter XP

Variante 1
 
Variante 2
 
Variante 3

// Beispiel für das Durchsuchen eines TRichEdit

var 
  Start: integer = 0; 
 
procedure HideUp(FD: TFindDialog); 
var 
  h: THandle; 
  x: integer; 
begin 
  h := FindWindowEx(FD.handle, 0, nil, nil); 
  for x := 0 to 3 do 
    h := getnextwindow(h, GW_HWNDNEXT); 
  showwindow(h, sw_hide); 
  h := getnextwindow(h, GW_HWNDNEXT); 
  showwindow(h, sw_hide); 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  Richedit1.HideSelection := false; 
  // Variante 1 
  // FindDialog1.Options := FindDialog1.Options + [frDisableUpDown]; 
  // Variante 2 
  // FindDialog1.Options := FindDialog1.Options + [frHideUpDown]; 
end; 
 
procedure TForm1.FindDialog1Show(Sender: TObject); 
begin 
  // Variante 3 
  HideUp(FindDialog1); 
 
  // Bei Bedarf Fragezeichen (Help-Button) entfernen 
  SetWindowLong(FindDialog1.Handle, GWL_EXSTYLE, 
    GetWindowLong(FindDialog1.Handle, GWL_EXSTYLE) and not WS_EX_CONTEXTHELP); 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  FindDialog1.Execute; 
end; 
 
procedure TForm1.FindDialog1Find(Sender: TObject); 
var 
  Ende: integer; 
begin 
  with Richedit1 do begin 
    Ende := Length(Text) - Start; 
    Start := FindText(FindDialog1.FindText, Start, Ende, []); 
    if Start <> -1 then 
    begin 
      SetFocus; 
      SelStart := Start; 
      SelLength := Length(FindDialog1.FindText); 
      Perform(EM_SCROLLCARET, 0, 0); 
      inc(Start); 
    end else begin 
      showmessage('Bis zum Ende durchsucht'); 
      start := 0; 
    end; 
  end; 
end; 
 
procedure TForm1.FindDialog1Close(Sender: TObject); 
begin 
  start := 0; 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke