Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

как можно использовать функцию DlgDirList без применения визуальн   Найти похожие ветки 

 
sergey1 ©   (2005-11-19 02:22) [0]

я извиняюсь как можно использовать функцию DlgDirList без применения визуальных компонентов


 
Джо ©   (2005-11-19 02:23) [1]

А что это за функция такая?


 
sergey1 ©   (2005-11-19 02:28) [2]

я так понял что она записывает все файлы и каталоги текущего диска в ListBox (тоже созданный при помощи WINDOWS API)


 
Джо ©   (2005-11-19 02:28) [3]


> [1] Джо ©   (19.11.05 02:23)
> А что это за функция такая?

Упс, нашел :)


 
Джо ©   (2005-11-19 02:29) [4]

Так проблема в том, как создать диалоговое окно с окном LISTBOX? Или в чем-то другом?


 
sergey1 ©   (2005-11-19 02:35) [5]

нет, ListBox я создал на основной форме теперь не могу сооброзить как заставить функцию DlgDirList работать


 
Джо ©   (2005-11-19 02:38) [6]


>  [5] sergey1 ©   (19.11.05 02:35)
> нет, ListBox я создал на основной форме

Тут, наверное, какое-то недоразумение. В сабже указано "без применения визуальных компонентов", конференция WinAPI, опять же. Так причем здесь какие-то формы?
Я честно не понимаю.


 
Джо ©   (2005-11-19 02:46) [7]

Предположу, что все-таки, визуальнык компоненты все-же используеются, а вопрос только в том, как использовать функцию.
Если это так, то вот пример заполнения ЛистБокса именами директорий в текущей директории:

procedure TForm1.Button1Click(Sender: TObject);
begin
 DlgDirList (Handle,nil,GetDlgCtrlID (ListBox1.Handle),0,
   DDL_DIRECTORY);
end;

Или это не то?


 
sergey1 ©   (2005-11-19 03:01) [8]

приведу пример для лучшего понимания

program programma;

uses
 windows,messages;

const idlistbox=10;
      main=9;
      idb_1=1;
var   wc : TWndClassEx;//Переменная шаблона класса окна

MainWnd : HWND;       //Описатель главного окна
WndButton:hwnd;
WndListbox:hwnd;

   Mesg : TMsg;       //Переменная для цикла сбора сообщений

{  Далее следует оконная процедура главного окна. }

//*************************************************************************
function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):
Lresult;
stdcall;
var
ndx,id:word;
p:Pchar;
Begin
{Далее происходит цикл обработки сообщений}
 case msg of
wm_close ://Сообщение посылаемое при уничтожении окна
 Begin
  postquitmessage(0); exit;

  Result:=0;
  End;

 wm_command:
case hiWord(wParam) of
        idb_1 : begin

   ???    DlgDirList(WndListbox,"C:\\*.*",
        idlistbox,idlistbox,ddl_drives );
          end;

 end
 else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
      End;
{***********************************************************************}

{Переменные xPos,yPos,nWidth,nHeight в принципе не нужны, однако я их завел}
var xPos,yPos,nWidth,nHeight : Integer;

begin
{  Далее идет заполнение шаблона класса окна  }
wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="WinMin : Main";

RegisterClassEx(wc);//Регистрация нового класса в системе

{  Заполнение переменных xPos,yPos,nWidth,nHeight}
xPos:=100;
yPos:=150;
nWidth:=400;
nHeight:=250;

{  Создание главного окна}
MainWnd:=CreateWindowEx(
0,                  //флаги расширенных стилей
"WinMin : Main",    //имя класса окна, данное при заполнении структуры wc
"Win Min",          //заголовок окна
ws_overlappedwindow,//флаги стилей окна
{подробнее о стилях см. после текста программы}
xPos,               //горизонтальная позиция окна
yPos,               //вертикальная позиция окна
nWidth,             //ширина окна
nHeight,            //высота окна
0,                  //описатель родительского окна (parent) или окна-владельца (owner)
0,                  //описатель меню окна (меню нет, нет и описателя)
Hinstance,          //описатель приложения
nil                 //address of window-creation data
);


WndButton:=CreateWindowEx(0,"button","Кнопка",
BS_pushbutton or bs_bottom or WS_VISIBLE or WS_CHILD,//стиль кнопки
200, 150, 75, 25,
mainWnd, 0, hInstance, nil );



WndListbox:=CreateWindowEx(WS_EX_CLIENTEDGE,"listbox","",
lbs_notify or ws_visible or ws_child or ws_border,//стиль списка
10, 10, 100, 250, //координаты по x и y, ширина, высота
mainWnd, 0, hInstance, nil );//

SetFocus(wndlistbox);

ShowWindow(MainWnd,CmdShow);//Отображаем окно

//Цикл обработки сообщений

While GetMessage(Mesg,0,0,0) do
begin
 TranslateMessage(Mesg);
 DispatchMessage(Mesg);
end;

end.



 
gdaujk ©   (2005-11-19 06:20) [9]

Создание:

WndListbox:=CreateWindowEx(WS_EX_CLIENTEDGE,"listbox","",
                 lbs_notify or ws_visible or ws_child or ws_border,//стиль списка
                 10, 10, 100, 250, //координаты по x и y, ширина, высота
                 mainWnd, idlistbox,       //ListBox identifier
                 hInstance, nil );


При создании кнопки тоже укажи  identifier - idb.

Вызов DlgDirList:

DlgDirList(WndListbox,"C:\\*.*", idlistbox,0 {or identifier of static control}
              ,ddl_drives );


PS: не советовал бы при таком уровне знаний производить какие-либо манипуляции с драйверами...


 
gdaujk ©   (2005-11-19 06:22) [10]

Не гарантирую что вышенаписанное будет работать, сам не пробовал...


 
begin...end ©   (2005-11-19 08:57) [11]

> gdaujk ©   (19.11.05 06:20) [9]

> DlgDirList(WndListbox,"C:\\*.*", ...

Строка lpPathSpec не должна быть константой. Она не только in-параметр, но и out (см. MSDN).


 
gdaujk ©   (2005-11-19 10:52) [12]

begin...end ©   (19.11.05 08:57) [11]

Так точно.


 
sergey1 ©   (2005-11-22 00:54) [13]

PS: не советовал бы при таком уровне знаний производить какие-либо манипуляции с драйверами...

ну а что делать если задали курсовую , а источников никаких нет , только направление задали. Вперед и с песней в интернет. Мало того, нужно сделать файловый менеджер, во как, не хило ? да.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1137151161
Хинт
2006-01-13 14:19
2006.02.05
Редактор HTML/PHP


2-1137461267
Kostik
2006-01-17 04:27
2006.02.05
Функция перевода строки из русской в английскую и наоборот.


2-1137698958
Dead.MorozZ
2006-01-19 22:29
2006.02.05
CH Pack


1-1136296022
TStas
2006-01-03 16:47
2006.02.05
Почему TBitmap становится недоступным, если есть ссылка на Window


2-1137584716
Officeman
2006-01-18 14:45
2006.02.05
есть ли функция чёт - нечёт ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский