Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Показать диалог поиска файлов

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Показать диалог поиска файлов

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   DDEMan;

 procedure SearchInFolder(Folder: string);
 begin
   with TDDEClientConv.Create(Self) do
   begin
     ConnectMode        := ddeManual;
     ServiceApplication := 'Explorer.exe';
     SetLink('Folders', 'AppProperties');
     OpenLink;
     ExecuteMacro(PChar('[FindFolder(, ' + Folder + ')]'), False);
     CloseLink;
     Free;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   SearchInFolder('c:\Windows');
 end;

 {************************************}

 // Or even easier with ShellExecute: 

ShellExecute(Handle, 'find', 'C:\Windows', nil, nil, SW_SHOW);

 {************************************}

 // Suchen-Dialog ausfuhren und einen Suchstring ubergeben: 

uses
   ShellAPI;

 procedure WindowsSuchenDialog(Verzeichnis, Suchstring: string);
 var
   hOtherWin, hFocusWin: HWND;
   OtherThreadID, iTimeOut: Integer;
   aDwordVar: DWORD;
   buf: array [0..40] of Char;
   sVerz: string;
 begin
   // ShellExecute(application.handle, 'find', 'c:\', nil, nil, SW_SHOWNORMAL); 
  // oder mit TDDEClientConv 
  with TDDEClientConv.Create(nil) do
   begin
     ConnectMode := ddeManual;
     ServiceApplication := 'explorer.exe';
     SetLink('Folders', 'AppProperties');
     OpenLink;
     sVerz := IncludeTrailingBackslash(Verzeichnis);
     ExecuteMacro(PChar('[FindFolder(, '+ sVerz +')]'), False);
     CloseLink;
     Free;
   end;
   iTimeOut := 0;
   repeat
     { Warten, bis der Such Dialog erscheint. 
      Unter Win95/98/NT4 hat der Suchdilaog die Klasse #32770. 
      Unter ME/2000/XP ist die Suche in den Explorer integriert, 
      darum auf CabinetWClass warten}
     Sleep(100);
     hOtherWin := GetForegroundWindow;
     buf[0] := #0;
     GetClassName(hOtherWin, buf, 60);
     inc(iTimeOut);
   until (StrComp(buf, '#32770') = 0) or (StrComp(buf, 'CabinetWClass') = 0) or (iTimeOut > 20);
   if iTimeOut > 20 then Exit;
   repeat
     { Wait until it is visible }
     { Warten, bis das Fenster erscheint }
     Sleep(100);
   until IsWindowVisible(hOtherWin);

   { Handle vom Control finden, welches den Fokus besitzt }
   OtherThreadID := GetWindowThreadProcessID(hOtherWin, @aDwordvar);
   if AttachThreadInput(GetCurrentThreadID, OtherThreadID, True) then
   begin
     hFocusWin := GetFocus;
     if hFocusWin <> 0 then
       try
         SendMessage(hFocusWin, WM_SETTEXT, 0, Longint(PChar(Suchstring)));
       finally
         AttachThreadInput(GetCurrentThreadID, OtherThreadID, False);
       end;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   WindowsSuchenDialog('c:\temp','test.txt');
 end;

Here's a translation of the content into Russian:

SearchInFolder

Процедура использует DDE (динамическое взаимодействие данных) для поиска папки с помощью приложения Explorer.

  • Folder: Путь к папке, которую нужно найти.
  • Соединяется с приложением Explorer с помощью DDE.
  • Устанавливает ссылку на тему "Папки" и открывает ее.
  • Выполняет макро для поиска указанной папки.
  • Закрывает ссылку и освобождает клиент-конвертер DDE.

Button1Click

Событийный обработчик вызывает процедуру SearchInFolder с путем 'c:\Windows'.

Альтернативное решение с использованием ShellExecute

Вместо использования DDE можно использовать функцию ShellExecute для поиска файлов. Это более простой подход и не требует настройки соединения DDE.

  • ShellExecute: Объект приложения.
  • 'find': Действие, которое нужно выполнить (поиск).
  • 'C:\Windows': Путь к поиску.
  • nil, nil: Не требуются дополнительные параметры.
  • SW_SHOW: Окно должно быть показано.

WindowsSuchenDialog

Процедура использует модуль ShellAPI для запуска диалога поиска Windows и ввода строки поиска.

  • Verzeichnis: Папка, которую нужно найти.
  • Suchstring: Строка поиска, которая будет введена в диалоге.
  • Соединяется с приложением Explorer с помощью DDE (аналогично SearchInFolder).
  • Устанавливает ссылку на тему "Папки" и открывает ее.
  • Выполняет макро для поиска указанной папки.
  • Ожидает появления диалога поиска (используя таймер).
  • Вводит строку поиска в диалог.

Button1Click

Событийный обработчик вызывает процедуру WindowsSuchenDialog с папкой 'c:\temp' и строкой поиска 'test.txt'.

Примечание: Код написан на языке Pascal, используя синтаксис Delphi.

Показано kako функционировать диалог поиска файлов в Delphi с помощью DDE и ShellExecute, а также выполнение задачи поиска файла на компьютере.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Диалоги и Фреймы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:57:15/0.0018539428710938/0