// 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;
|