Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Вставка компонентов   Найти похожие ветки 

 
lobach ©   (2006-06-22 10:16) [0]

Подскажите пожалуйста, как вставлять компоненты, пользуясь функциями win api? Привидите пример, например, как вставить поле ввода текста, или какой-нибудь Timer...
С WinApi начал недавно парится, смотрел хелпы, но ничего не понял...


 
Сергей М. ©   (2006-06-22 10:47) [1]

В WinAPI нет никаких "компонентов".


 
webpauk   (2006-06-22 11:53) [2]


> lobach ©   (22.06.06 10:16)  

если ты имеешь в виду создание формы и дочернего компонента (VCL Tedit)
смотри: http://www.xproger.mirgames.ru/files/art/winapi/winapi2.rar


 
grisme ©   (2006-06-22 14:05) [3]

Просто тебе надо начать изучение с лит-ры, потому что все там "устроено" не как в волшебно-прекрасно-легком VCL :) Рекоммендую: Дэн Эпплман "Win32 API и VB"...Фиг с ним, что VB, API он и в Африке API, зато там классно он описывает эпоху перехода с Win16 на Win32...;)


 
lobach ©   (2006-06-22 16:00) [4]


> если ты имеешь в виду создание формы и дочернего компонента

Да, на VCL конечно удобнее, но размер на нравится...
А тут пример посмотрел проги на по 10 кб мелкие, а c VCL одна форма пустая 300 кб...


 
Amoeba ©   (2006-06-22 17:28) [5]


> lobach ©   (22.06.06 16:00) [4]
>
> > если ты имеешь в виду создание формы и дочернего компонента
>
>
> Да, на VCL конечно удобнее, но размер на нравится...
> А тут пример посмотрел проги на по 10 кб мелкие, а c VCL
> одна форма пустая 300 кб...

Ваяй все целиком на API. Но в таком случае полностью забудь про VCL, формы и компонеты Delphi, т.е. про все, что Delphi предоставляет программисту как RAD система программирования. Или, как вариант, посмотри в строну библиотеки KOL.


 
Gero ©   (2006-06-23 01:48) [6]

> [4] lobach ©   (22.06.06 16:00)

На винчестере не помещается?


 
lobach ©   (2006-06-23 05:22) [7]


> Ваяй все целиком на API. Но в таком случае полностью забудь
> про VCL, формы и компонеты Delphi, т.е. про все, что Delphi
> предоставляет программисту

Так вот я и хочу...


 
tButton ©   (2006-06-23 07:20) [8]


> Так вот я и хочу...

похвально...


 
Amoeba ©   (2006-06-23 10:27) [9]


> lobach ©   (23.06.06 05:22) [7]
>
> > Ваяй все целиком на API. Но в таком случае полностью забудь
>
> > про VCL, формы и компонеты Delphi, т.е. про все, что Delphi
>
> > предоставляет программисту
>
> Так вот я и хочу...


Тогда дерзай! Только вот интересно, сколько недель понадобится тебе как начинающему на написание программы несколько более сложной чем "Нello World!"?


 
lobach ©   (2006-06-28 05:16) [10]

Ну а как вставить например что-то типа Label?, или Timer?


 
Fay ©   (2006-06-28 06:27) [11]

2 lobach ©   (28.06.06 5:16) [10]
куда вставить?


 
Amoeba ©   (2006-06-28 12:44) [12]


> lobach ©   (28.06.06 05:16) [10]
> Ну а как вставить например что-то типа Label?, или Timer?
>

Никак!

Вне VCL Label не существует (да и Windows о наличии в природе такого объекта ничего не знает и не может знать). Так что если пишешь на API, то напрочь забудь об Application, Form и всех компонентах Delphi. Скрестить ужа с ежом и получить при этом что-либо более путное, нежели кусок колючей проволоки, не получится.


 
lobach ©   (2006-06-29 11:17) [13]

А что тада вообще этот API может?


 
Плохиш ©   (2006-06-29 11:35) [14]


> lobach ©   (29.06.06 11:17) [13]
> А что тада вообще этот API может?

Выполнять инструкции программиста.

> Fay ©   (28.06.06 06:27) [11]
> 2 lobach ©   (28.06.06 5:16) [10]
> куда вставить?

Гусары! Молчатьььь!!!


 
Amoeba ©   (2006-06-29 12:00) [15]


> lobach ©   (29.06.06 11:17) [13]
> А что тада вообще этот API может?

Например, создавать стандартные контролы Windows, обертками над которыми является часть компонетов Delphi VCL. А также использоваться при написании кода своих компонентов, и еще много-где.


 
lobach ©   (2006-07-01 15:01) [16]

Может ссылку какую дадите, а то очень уж хочется разобраться...


 
Юрий Зотов ©   (2006-07-01 15:07) [17]

> lobach ©   (28.06.06 05:16) [10]

Поймите главное - в WinAPI нет никаких компонентов. Нельзя вставить то, чего нет.

Вот Вам для затравки пример программы на чистейшем WinAPI. Если с помощью книг и справки разберетесь, как он работает, то очень много станет ясно и дальше будет намного легче.

program TrayWithoutVCL;

{$M 1024, 1024}

uses
 Windows,
 Messages,
 ShellAPI;

const
 AppName = "WinApiTrayApp";
 WM_TRAYMSG = WM_USER + 100;

var
 WndClass: TWndClassEx;
 WndHandle: HWND = 0;
 Msg: TMsg;
 IconData: TNotifyIconData;
 IconMenu: HMENU = 0;
 SecondIcon: HICON;

function WndFunc(Wnd, Msg: DWORD; wParam, lParam: integer): integer; stdcall;
var
 P: TPoint;
begin
 case Msg of
   WM_DESTROY, WM_QUERYENDSESSION:
     begin
       Result := Integer(Msg = WM_QUERYENDSESSION);
       PostQuitMessage(0)
     end;
   WM_TRAYMSG:
     begin
       Result := 0;
       if (lParam = WM_RBUTTONDOWN) and GetCursorPos(P) then
       begin
         SetForegroundWindow(Wnd);
         TrackPopupMenuEx(IconMenu, 0, P.X, P.Y, Wnd, nil);
         PostMessage(Wnd, WM_NULL, 0, 0)
       end
     end;
   WM_COMMAND:
     begin
       Result := 0;
       case wParam and $FFFF of
         0: begin
              if IconData.hIcon = SecondIcon then
                IconData.hIcon := WndClass.hIcon
              else
                IconData.hIcon := SecondIcon;
              Shell_NotifyIcon(NIM_MODIFY, @IconData)
            end;
         1: PostMessage(Wnd, WM_CLOSE, 0, 0)
       end
     end;
   else
     Result := DefWindowProc(Wnd, Msg, wParam, lParam)
 end
end;

{ -------------------------------------------------------------------------------------------- }

begin { main }
 with WndClass do
 begin
   cbSize := SizeOf(WndClass);
   Style := CS_HREDRAW or CS_VREDRAW ;
   lpfnWndProc := @WndFunc;
   hIcon := LoadIcon(0, IDI_EXCLAMATION);
   hCursor := LoadCursor(0, IDC_ARROW);
   hbrBackground := hBrush(COLOR_WINDOW);
   lpszMenuName := nil;
   lpszClassName := AppName;
   hIconSm := hIcon
 end;
 WndClass.hInstance := hInstance;
 if RegisterClassEx(WndClass) = 0 then
   Exit;
 WndHandle := CreateWindowEx(WS_EX_TOOLWINDOW, AppName, AppName, WS_OVERLAPPEDWINDOW,
   0, 0, 0, 0, 0, 0, hInstance, nil);
 if WndHandle = 0 then
   Exit;
 with IconData do
 begin
   cbSize := SizeOf(IconData);
   Wnd:= WndHandle;
   uID := 100;
   uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
   uCallbackMessage := WM_TRAYMSG;
   hIcon:= WndClass.hIcon;
   szTip := AppName
 end;
 if Shell_NotifyIcon(NIM_ADD, @IconData) then
 try
   IconMenu := CreatePopupMenu;
   if IconMenu <> 0 then
   try
     if AppendMenu(IconMenu, MF_STRING, 0, "&#209;&#236;&#229;&#237;&#232;&#242;&#252; &#232;&#234;&#238;&#237;&#234;&#243;") and
        AppendMenu(IconMenu, MF_STRING, 1, "&#194;&#251;&#245;&#238;&#228;") then
     begin
       SecondIcon := LoadIcon(0, IDI_QUESTION);
       while GetMessage(Msg, 0, 0, 0) do
       begin
         TranslateMessage(Msg);
         DispatchMessage(Msg)
       end
     end
   finally
     DestroyMenu(IconMenu)
   end;
 finally
   Shell_NotifyIcon(NIM_DELETE, @IconData)
 end
end.


 
lobach ©   (2006-07-02 07:55) [18]


> Нельзя вставить то, чего нет

Я имел ввиду функции WinApi, которые реализуют вещи, аналогичные тем, что создаются с VCL


 
Юрий Зотов ©   (2006-07-02 13:19) [19]

> lobach ©   (02.07.06 07:55) [18]

Эти вещи называются "окна", "меню", "иконки", "потоки" и т.п. Но они - не совсем аналоги VCL (хотя соответствующие классы VCL именно на них и основаны).



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

Текущий архив: 2006.07.23;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.03 c
2-1151843884
S-Slim
2006-07-02 16:38
2006.07.23
надо копировать DB файл!


3-1148282304
Juice
2006-05-22 11:18
2006.07.23
Что вызывать после изменения критерия фильтрации


3-1148137898
wirg
2006-05-20 19:11
2006.07.23
Подскажите как исправить название в заголовке Грида


15-1151040139
Ega23
2006-06-23 09:22
2006.07.23
С Днём рождения! 23 июня


2-1151873123
Deny20
2006-07-03 00:45
2006.07.23
помогите чем могите разобраться с печатью Курсак горит!!!