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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.013 c
3-1148227370
Karburator
2006-05-21 20:02
2006.07.23
TIBQuery > свойство Params


2-1151929185
Id
2006-07-03 16:19
2006.07.23
Добавление полей в триггере


3-1147629839
Моторин Алексей
2006-05-14 22:03
2006.07.23
Как Открыть базу DBF котороя использует инвертируемый индекс


1-1149649436
_HAWK_
2006-06-07 07:03
2006.07.23
Как перевести на WinAPI?


15-1149684595
oldman
2006-06-07 16:49
2006.07.23
супертяжелое вооружение...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский