Форум: "Начинающим";
Текущий архив: 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, "Ñìåíèòü èêîíêó") and
AppendMenu(IconMenu, MF_STRING, 1, "Âûõîä") 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.014 c