информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаВсе любят медСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 С наступающим 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Delphi] Я дарю его тебе ;-) 01.11.04 09:35  Число просмотров: 2339
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> Два вопроса по этой теме:
> 1. как с каждым файлом из указанной директории сделать одни
> и те же действия?
Юзай Win32API... FindFirstFile() - FindNextFile() - FindClose()

> 2. как сделать диалог выбора директории (на закладке
> Dialogs такого нет, обычный OpenDialog не пашет)?
Дарю тебе целый Unit. Надеюсь, разберёшься... Можешь потом использовать его в любой из своих программ.
unit SHBrowseFolder;
interface
Uses Windows, SysUtils;


  Function BrowseFolder(aWndOwner: THandle; aTitle: String; FromPath: String = ''): String;

implementation
Uses ActiveX, ShlObj;
Var fSHMalloc: IMalloc = Nil;

    Function BrowseCallbackProc(ahwnd: HWND; uMsg: UINT; alParam, lpData: LPARAM): integer; StdCall;
    Begin
      If uMsg = BFFM_INITIALIZED Then
        PostMessage(ahwnd, BFFM_SETSELECTION, DWORD(True), DWORD(lpData));
      Result := 0;
    End;
  Function BrowseFolder(aWndOwner: THandle; aTitle: String; FromPath: String = ''): String;
  Var
    anInfo: TBrowseInfo;
    aResult: PItemIDList;
  Begin
    ZeroMemory(@anInfo, SizeOf(anInfo));
    anInfo.hwndOwner := aWndOwner;
    anInfo.lpszTitle := PChar(aTitle);
    anInfo.ulFlags := BIF_RETURNONLYFSDIRS;
    If FromPath <> '' Then
    Begin
      anInfo.lpfn := @BrowseCallbackProc;
      anInfo.lParam := DWORD(PChar(FromPath));
    End;
    aResult := SHBrowseForFolder(anInfo);
    If aResult = Nil Then Abort;
    Try
      SetLength(Result, MAX_PATH);
      Win32Check(SHGetPathFromIDList(aResult, PChar(Result)));
      SetLength(Result, StrLen(PChar(Result)));
    Finally
      fSHMalloc.Free(aResult);
    End;
  End;



Initialization
  Win32Check(SHGetMalloc(fSHMalloc) = NOERROR);

Finalization
  If fSHMalloc <> Nil Then
    fSHMalloc._Release;
end.

---
<programming>
[Delphi] работа с файлами в директории 01.11.04 08:21  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
Два вопроса по этой теме:
1. как с каждым файлом из указанной директории сделать одни и те же действия?
2. как сделать диалог выбора директории (на закладке Dialogs такого нет, обычный OpenDialog не пашет)?
[Delphi] Я дарю его тебе ;-) 01.11.04 09:35  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> Два вопроса по этой теме:
> 1. как с каждым файлом из указанной директории сделать одни
> и те же действия?
Юзай Win32API... FindFirstFile() - FindNextFile() - FindClose()

> 2. как сделать диалог выбора директории (на закладке
> Dialogs такого нет, обычный OpenDialog не пашет)?
Дарю тебе целый Unit. Надеюсь, разберёшься... Можешь потом использовать его в любой из своих программ.
unit SHBrowseFolder;
interface
Uses Windows, SysUtils;


  Function BrowseFolder(aWndOwner: THandle; aTitle: String; FromPath: String = ''): String;

implementation
Uses ActiveX, ShlObj;
Var fSHMalloc: IMalloc = Nil;

    Function BrowseCallbackProc(ahwnd: HWND; uMsg: UINT; alParam, lpData: LPARAM): integer; StdCall;
    Begin
      If uMsg = BFFM_INITIALIZED Then
        PostMessage(ahwnd, BFFM_SETSELECTION, DWORD(True), DWORD(lpData));
      Result := 0;
    End;
  Function BrowseFolder(aWndOwner: THandle; aTitle: String; FromPath: String = ''): String;
  Var
    anInfo: TBrowseInfo;
    aResult: PItemIDList;
  Begin
    ZeroMemory(@anInfo, SizeOf(anInfo));
    anInfo.hwndOwner := aWndOwner;
    anInfo.lpszTitle := PChar(aTitle);
    anInfo.ulFlags := BIF_RETURNONLYFSDIRS;
    If FromPath <> '' Then
    Begin
      anInfo.lpfn := @BrowseCallbackProc;
      anInfo.lParam := DWORD(PChar(FromPath));
    End;
    aResult := SHBrowseForFolder(anInfo);
    If aResult = Nil Then Abort;
    Try
      SetLength(Result, MAX_PATH);
      Win32Check(SHGetPathFromIDList(aResult, PChar(Result)));
      SetLength(Result, StrLen(PChar(Result)));
    Finally
      fSHMalloc.Free(aResult);
    End;
  End;



Initialization
  Win32Check(SHGetMalloc(fSHMalloc) = NOERROR);

Finalization
  If fSHMalloc <> Nil Then
    fSHMalloc._Release;
end.

---
За подарок спасибо, только такой вопрос: 01.11.04 14:22  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
Отредактировано 01.11.04 15:37  Количество правок: 1
<"чистая" ссылка>
За подарок спасибо, только такой вопрос:
> Юзай Win32API... FindFirstFile() - FindNextFile() -
> FindClose()
есть ли альтернативный вариант? просто получить список файлов в директории и с каждым из них проделать одинаковые действия?
ах да, и ещё кое-что, как загнать сразу несколько файлов из OpenDialog'a (в смысле, в OpenDialog выбрать несколько файлов) в ListBox?
«А можно ли получить список файлов без программирования»? Нет, нельзя ;-) Ведь надо хотя бы изъявить о своём желании ;-) 01.11.04 17:10  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 01.11.04 17:12  Количество правок: 1
<"чистая" ссылка>
> OpenDialog'a (в смысле, в OpenDialog выбрать несколько
> файлов) в ListBox?
Можно. Примерно так.
procedure TForm1.Button1Click(Sender: TObject);
Var
  aDial: TOpenDialog;
  anOptions: TOpenOptions;
begin
  aDial := TOpenDialog.Create(Self);
  Try
    anOptions := aDial.Options;
    Include(anOptions, ofAllowMultiSelect);
    aDial.Options := anOptions;
    If Not aDial.Execute Then Exit;
    ListBox1.Items.AddStrings(aDial.Files);
  Finally
    aDial.Free;
  End;
end;

---

Можно не создавать диалог динамически, а обращаться к тому, что положишь на форму. Принцип тот же. К тому же удобно настраивать опции диалога, сразу Object Inspector'ом.
Благодарю. И, если не возражаете, ещё один вопрос: 02.11.04 01:36  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
Отредактировано 02.11.04 01:37  Количество правок: 1
<"чистая" ссылка>
Благодарю. И, если не возражаете, ещё один вопрос:
Как получить значение указанной строки из ListBox в переменную типа string?
А ты справку почитать не пробовал??? 02.11.04 07:07  
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
<"чистая" ссылка>
> Благодарю. И, если не возражаете, ещё один вопрос:
> Как получить значение указанной строки из ListBox в
> переменную типа string?

var
MyString : AnsiString;
....
MyString := ListBox1.Items.Strings[i];
где i - номер строки в листбоксе.

<private>А вообще, после прочтения твоих вопросов, у меня складывается стойкое впечатление, что справочных руководств (да того же встроенного хелпа в делфю) ты не читаешь в принципе. Никогда.
Либо у тебя большие проблемы с английским (учите, молодой человек, учите непременно!) или вообще нет никаких способностей к программированию (во что очень не хочется верить).</private>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach