Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2008, 11:21   #1
Iber
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 20
По умолчанию Собственный класс диалогового окна на чистом WinApi в Delphi

Окно должно реализовать функцию обзора содержимого диска аля любая из панелек тотал командера...другими словами дерево файлов показать вобшем необходимо..

не представляю как делать... помагите плз :[
Iber вне форума Ответить с цитированием
Старый 10.11.2008, 17:59   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,805
По умолчанию

в чём собственно проблема?
описание функции RegisterClassEx
rpy3uH вне форума Ответить с цитированием
Старый 10.11.2008, 21:10   #3
Iber
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 20
По умолчанию

я незнаю как реализоват на чистом винапи в делфи показ дерева файлов...просто в делфе используя формы, vcl и тд не проблема но с апи не работал никогда...грубо говаря создал окно кнопки менюшку на апи дальше не могу надо както реализовать дерево каталогов
Iber вне форума Ответить с цитированием
Старый 10.11.2008, 22:10   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,805
По умолчанию

сначала получи список папок и файлов в папке, потом выводи в контрол по строкам сначала значок потом имя файла или папки. Получать список файлов надо только один раз. Выводить надо при получении сообщения WM_PAINT

Последний раз редактировалось rpy3uH; 10.11.2008 в 22:15.
rpy3uH вне форума Ответить с цитированием
Старый 11.11.2008, 09:13   #5
Iber
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 20
По умолчанию

какие функции для получения списка файлов в директории?
что такое контрол?если это стандартные компонент тонезя мне им пользоватся%)
Iber вне форума Ответить с цитированием
Старый 11.11.2008, 18:54   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,805
По умолчанию

Цитата:
Сообщение от Iber Посмотреть сообщение
какие функции для получения списка файлов в директории?
FindFirstFile, FindNextFile

Цитата:
Сообщение от Iber Посмотреть сообщение
что такое контрол?
контрол это окно (в Windows всё что имеет хендл это окно, EDIT это окно, BUTTON это окно, COMBOBOX это окно и так далее)

Цитата:
Сообщение от Iber Посмотреть сообщение
если это стандартные компонент тонезя мне им пользоватся%)
можно, но тогда весь смысл программирования на Win API теряется, проще пользоваться возможностями VCL. Ну если просто от балды припёрло на Win API программировать, то пойдёт...
rpy3uH вне форума Ответить с цитированием
Старый 11.11.2008, 21:22   #7
Iber
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 20
По умолчанию

незя мне по заданию ни vcl ни стандартные компоненты делфи юзить
Iber вне форума Ответить с цитированием
Старый 14.11.2008, 17:21   #8
Iber
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 20
По умолчанию

2rpy3uH
смогешь иходник дать с небольшим примером использования этих функций :[ :[?
Iber вне форума Ответить с цитированием
Старый 14.11.2008, 19:59   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,805
По умолчанию

пример приложения полностью на Win API. есть COMBOBOX, кнопка и таймер. Таймер выводит сообщение каждую секунду, когда кликаешь на любом месте, формы в комбобокс добавляется новая строка.
Код:
program winmin;

uses
  windows, messages,sysutils;
var
  wc : TWndClassEx;
  Box,MainWnd,button_handle,label_handle : HWND;
  Mesg : TMsg;
  xPos,yPos,nWidth,nHeight : Integer;
  xbPos,ybPos,bWidth,bheight:Integer;
  xlblPos,ylblPos,lblWidth,lblHeight:integer;

  str:string ;
  counter:DWORD = 0;

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult;
 stdcall;
Begin 
  case msg of
   wm_destroy :
    Begin
     postquitmessage(0); exit;
     Result:=0;
    End ;
   WM_LBUTTONDOWN:
     begin
      str:='stroka '+IntToStr(counter);
      inc(counter);
      SendMessage(box,CB_ADDSTRING,0,integer(pchar(str)));
     end;
   else Result:=DefWindowProc(wnd,msg,wparam,lparam);
  end;

End;

var
   TID:DWORD;

procedure TimerProc(Handle:HWND;uMsg:DWORD;idEvent:DWORD;dwTime:DWORD);stdcall;
begin
   MessageBox(0,'1','2',0);
end;


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_WARNING);
  wc.hCursor:=LoadCursor(0,idc_arrow);
  wc.hbrBackground:=COLOR_BTNFACE+1;
  wc.lpszMenuName:=nil;
  wc.lpszClassName:='TMainForm';
  RegisterClassEx(wc);
    //окно
  xPos:=100;
  yPos:=150;
  nWidth:=400;
  nHeight:=250;
  MainWnd:=CreateWindowEx ( 0,
        'TMainForm',
        'Минимальное приложение',
        WS_CAPTION or WS_SYSMENU, //флаги стилей окна
        xPos, yPos,nWidth,nHeight,
        0,                  //описатель родительского окна (parent) или окна-владельца (owner)
        0,                  //описатель меню окна (меню нет, нет и описателя)
        Hinstance,          //описатель приложения
        nil                 //address of window-creation data
        );
  ShowWindow(MainWnd,CmdShow); //Отображаем окно

  bWidth:=90;
  bheight:=50;
  xbPos:=nWidth-bWidth-10;
  ybPos:=nHeight-bHeight-30;

  button_handle:=CreateWindowEX(0,'BUTTON',
                                'Кнопка',
                                WS_CHILD,
                                xbPos,ybPos,bWidth,bheight,
                                mainwnd,0,
                               0,nil);
  ShowWindow(button_handle,SW_SHOWNORMAL);

  xlblPos:=10;
  ybPos:=10;
  lblWidth:=100;
  lblHeight:=120;

  label_handle:=CreateWindowEX(0,'STATIC',
                               'кликни по любому месту на форме чтобы добавить стоку в комобокс',
                               WS_CHILD or SS_CENTER,
                               xlblPos,ylblPos,lblWidth,lblHeight,
                               mainwnd,0,
                               0,nil);
  ShowWindow(label_handle,SW_SHOWNORMAL);
   lblHeight:=200; // 200 - это максимальная высота  выпадающего списка + высота поля редактирования

  Box:=CreateWindow('COMBOBOX', '',
                        WS_VISIBLE or WS_CHILD or SS_LEFT or CBS_DROPDOWNLIST,
                       8, 130, 220, lblHeight, MainWnd, 0, hInstance, nil);

  SendMessage(MainWnd,WM_LBUTTONDOWN,0,0);


  TID:=SetTimer(0,0,2000,@TimerProc);

  While GetMessage(Mesg,0,0,0) do
   begin
    TranslateMessage(Mesg);
    DispatchMessage(Mesg);
   end;
end.
rpy3uH вне форума Ответить с цитированием
Старый 14.11.2008, 20:45   #10
Iber
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 20
По умолчанию

пасиб огромное)
Iber вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
открытие окна в Delphi R11 Помощь студентам 3 14.02.2008 16:23
Рисование многоугольника (собственный класс) MaTBeu Общие вопросы C/C++ 1 08.12.2007 14:53
winapi in delphi steck Свободное общение 2 07.09.2007 08:40
открытие окна в delphi dima00 Общие вопросы Delphi 14 27.06.2007 23:25