IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Вопросы по WinApi...
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


"Вопросы по WinApi..."

Ковыряюсь во всяких справочниках... чего то ни фига не получается...
Если кто может подскажите, как сделать или где поглядеть пример...

1. CreateWindow ( 'STATIC', text', WS_CHILD or WS_VISIBLE, 30, 8, 500, 80, handleWnd, 0, hInstance, nil );
* как задать ему цвет
* сделать вертикальный скролл
* изменить шрифт (размер, цвет и сам шрифт)

2. Загрузить и показать рисунок (bmp и jpg)...

3. Изменить цвет border color...

4. обработка нажатия кнопки...

лучше всего пример... blush.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
а в edit'е можно сделать перенос строк? и как...
Легко... Но давай начнем с того, что тебе надо подкорректировать всю программу:
program WinApiTest;

uses
Windows, Messages;

const
myClassName= 'myWindow';

BTN_ID = 200; // ID кнопки

var
handleWnd, myButton, myLabel, myStatic: HWND;
myFont: HFONT;

WndClass: TWndClassEx;
Msg: TMsg;

// Procedure & function >>
function WindowProc(Window: HWND; AMessage: UINT;
WParam: WPARAM; LParam: LPARAM): INT_PTR; stdcall;
begin
case AMessage of
WM_COMMAND: // Здесь ловим ID нажатой кнопки
begin
case LoWord(WParam) of
BTN_ID: // Вот он, значит, закрываем приложение
begin
PostQuitMessage(0);
Result := 0;
end;
end;
end;

WM_DESTROY: // Ну, или закрыли крестиком или Alt+F4
begin
PostQuitMessage(0);
Result := 0;
end;

else
// Если ничего не отработало - то вызываем стандартную функцию
Result := DefWindowProc(Window, AMessage, WParam, LParam);
end;

end;

// Main Function
begin
with WndClass do begin
cbSize := SizeOf(WndClass);
style := CS_HREDRAW or CS_VREDRAW;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hIcon := LoadIcon(0, IDI_APPLICATION);
hCursor := LoadCursor(0, IDC_ARROW);
hbrBackground := COLOR_BTNFACE + 1;
lpszMenuName := nil;
lpszClassName := myClassName;
end;
WndClass.hInstance := HInstance;

if RegisterClassEx(WndClass) = 0 then exit;

// Создаем окно
handleWnd := CreateWindow(myClassName, 'Caption...',
WS_SYSMENU or WS_MINIMIZEBOX,
100, 100, 600, 400,
0, 0,
hInstance, nil);

ShowWindow(handleWnd, sw_ShowNormal);

// В этом окне - кнопку ...
myButton := CreateWindow('button', 'Close',
WS_VISIBLE or WS_CHILD,
10, 179, 275, 22,
handleWnd, BTN_ID, hInstance, nil);
// ... метку ...
myLabel := CreateWindow('static', 'Text',
WS_VISIBLE or WS_CHILD,
20, 10, 60, 23,
handleWnd, 0, hInstance, nil);

// ... и Edit
myStatic := CreateWindow('edit',
PChar('Borland Studio Projects Borland Studio Projects '+
'Borland Studio Projects Borland Studio Projects'+
'Borland Studio Projects Borland Studio Projects '+
'Borland Studio Projects Borland Studio Projects '+
'Borland Studio Projects Borland Studio Projects'+
'Borland Studio Projects Borland Studio Projects '+
'Borland Studio Projects Borland Studio Projects '+
'Borland Studio Projects Borland Studio Projects'+
'Borland Studio Projects Borland Studio Projects '+
'Borland Studio Projects Borland Studio Projects'),
WS_CHILD or WS_VISIBLE or WS_VSCROLL or ES_MULTILINE,
30, 25, 200, 100, handleWnd, 0, hInstance, nil );

// Это для красоты - меняем шрифт
myFont := CreateFont(
-11, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif'
);
SendMessage(myButton, WM_SETFONT, WPARAM(myFont), 0);
SendMessage(myLabel, WM_SETFONT, WPARAM(myFont), 0);
SendMessage(myStatic, WM_SETFONT, WPARAM(myFont), 0);

UpdateWindow(handleWnd);

while GetMessage (Msg, 0, 0, 0) do begin
TranslateMessage (Msg);
DispatchMessage (Msg);
end;
end.

Посмотри, что я изменил, и что из этого получилось... А потом посмотрим, что делать дальше... smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 7.05.2008 1:12) *

Легко... Но давай начнем с того, что тебе надо подкорректировать всю программу:
...
Посмотри, что я изменил, и что из этого получилось... А потом посмотрим, что делать дальше... smile.gif



program WinApiTest;

uses Windows, Messages, ComObj, SysUtils, ActiveX, ShlObj, shellapi;

const myClassName= 'myWindow';
BTN_ID = 200; // ID кнопки
IDChBox1 = 199;
IDRBtn1 = 1;
IDRBtn2 = 2;
IDRBtn3 = 3;
IDRBtn4 = 4;

var
handleWnd, myButton, myLabel, myStatic, ChBox1, RBtn1, RBtn2, RBtn3, RBtn4: HWND;
WndClass: TWndClassEx;
Msg: TMsg; SC1, SC2: string; myFont: HFONT;

// Procedure & function
function WindowProc(Window: HWND; AMessage: Integer;
WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
var
Res: LRESULT;
p: PChar;
n: integer;
begin
case AMessage of
WM_COMMAND: // Здесь ловим ID нажатой кнопки
begin
if ( LoWord( wParam ) >= IDRBtn1 ) and ( LoWord( wParam ) <= IDRBtn2 ) then
begin CheckRadioButton( handleWnd, IDRBtn1, IDRBtn2, LoWord( wParam ) ); end;
if ( LoWord( wParam ) >= IDRBtn3 ) and ( LoWord( wParam ) <= IDRBtn4 ) then
begin CheckRadioButton( handleWnd, IDRBtn3, IDRBtn4, LoWord( wParam ) ); end;
case LoWord(WParam) of
BTN_ID: begin PostQuitMessage(0); Result := 0; end;
IDRBtn1: begin end; // Обработка radiobutton'ов
IDRBtn2: begin end;
IDRBtn3: begin end;
IDChBox1: begin // обработка checkbox'ов
Res := SendMessage( ChBox1, BM_GETCHECK, 0, 0 );
case Res of
BST_CHECKED: SetWindowText( myLabel, 'Состояние: включен' );
BST_UNCHECKED: SetWindowText( myLabel, 'Состояние: выключен' );
end; end;
end;
end;
WM_DESTROY: // Ну, или закрыли крестиком или Alt+F4
begin
PostQuitMessage(0);
Result := 0;
end;
else
// Если ничего не отработало - то вызываем стандартную функцию
Result := DefWindowProc(Window, AMessage, WParam, LParam);
end;
end;

// Procedure & function
begin
with WndClass do begin
cbSize := SizeOf(WndClass);
style := CS_HREDRAW or CS_VREDRAW;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hIcon := LoadIcon(0, IDI_APPLICATION);
hCursor := LoadCursor(0, IDC_ARROW);
hbrBackground := COLOR_BTNFACE + 1;
lpszMenuName := nil;
lpszClassName := myClassName;
end;
WndClass.hInstance := HInstance;

if RegisterClassEx(WndClass) = 0 then exit;

handleWnd:= CreateWindow(myClassName, 'Caption...', WS_SYSMENU or WS_MINIMIZEBOX,
400-300,300-200, 600, 400, 0, 0, hInstance , NIL);
CreateWindow( 'Label', 'Text', WS_VISIBLE or WS_CHILD or WM_SETTEXT,
300, 152, 60, 23, handleWnd, 0, hInstance, nil);
ShowWindow(handleWnd, sw_ShowNormal);

myButton := CreateWindow('button', 'Close', WS_VISIBLE or WS_CHILD,
10, 179, 275, 22, handleWnd, BTN_ID, hInstance, nil);
myLabel := CreateWindow('static', 'Text', WS_VISIBLE or WS_CHILD,
20, 10, 120, 14, handleWnd, 0, hInstance, nil);
myStatic := CreateWindow('edit',
PChar('Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects'+
'Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects '+
'Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects '+
'Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects'+
'Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects'),
WS_CHILD or WS_VISIBLE or WS_VSCROLL or ES_MULTILINE + WS_BORDER,
30, 25, 200, 100, handleWnd, 0, hInstance, nil );

CreateWindow('STATIC', PChar('|||||||||||||||||||||||||||||||||||||||||||||||||'),
WS_CHILD or WS_VISIBLE or WS_BORDER + es_readonly,
100, 280, 400, 21, handleWnd, 0, hInstance, nil );

ChBox1 := CreateWindowEx( 0, 'Button', 'BS_AUTOCHECKBOX',
WS_CHILD or WS_VISIBLE or BS_AUTOCHECKBOX, 300, 10, 130, 25,
handleWnd, IDChBox1, hinstance, nil );
RBtn1 := CreateWindowEx( 0, 'Button', 'Опция 1',
WS_CHILD or WS_VISIBLE or BS_RADIOBUTTON, 300, 40, 80, 20,
handleWnd, IDRBtn1, hInstance, nil );
RBtn2 := CreateWindowEx( 0, 'Button', 'Опция 2',
WS_CHILD or WS_VISIBLE or BS_RADIOBUTTON, 300, 70, 80, 20,
handleWnd, IDRBtn2, hInstance, nil );
RBtn3 := CreateWindowEx( 0, 'Button', 'Опция 3',
WS_CHILD or WS_VISIBLE or BS_RADIOBUTTON, 300, 120, 80, 20,
handleWnd, IDRBtn3, hInstance, nil );
RBtn4 := CreateWindowEx( 0, 'Button', 'Опция 4',
WS_CHILD or WS_VISIBLE or BS_RADIOBUTTON, 300, 150, 80, 20,
handleWnd, IDRBtn4, hInstance, nil );

myFont:= CreateFont(-11, 0, 0, 0, FW_NORMAL, 0, 0, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');
SendMessage(myButton, WM_SETFONT, WPARAM(myFont), 0);
SendMessage(myLabel, WM_SETFONT, WPARAM(myFont), 0);
SendMessage(myStatic, WM_SETFONT, WPARAM(myFont), 0);
SendMessage( ChBox1, WM_SETFONT, WPARAM(myFont), 0 );
SendMessage( RBtn1, WM_SETFONT, WPARAM(myFont), 0 );
SendMessage( RBtn2, WM_SETFONT, WPARAM(myFont), 0 );
SendMessage( RBtn3, WM_SETFONT, WPARAM(myFont), 0 );
SendMessage( RBtn4, WM_SETFONT, WPARAM(myFont), 0 );

SendMessage( RBtn1, BM_CLICK, 0, 0 ); SendMessage( RBtn3, BM_CLICK, 0, 0 );
// Нажимаем radiobutton, для инициализации...

UpdateWindow(handleWnd);
while GetMessage (Msg, 0, 0, 0) do begin
TranslateMessage (Msg); DispatchMessage (Msg);
end;

end.


Спасибо, многое вроде понял :-)
но вопросики остались :-[

Поле Edit... мне нужно туда выводить текст, скролл если текст влазить не будет,
но этот текст должно быть нельзя редактировать.
es_readonly
- почти то что нужно, но меняется цвет, а нужен всё таки белый...
как изменить цвет или как по другому сделать можно, это 1.

2. Ну всё также, загрузка/показ рисунка... ни где так примера и не нашел...

3. Можно ли вызвать стандартный progress bar.... там я в исходнике в принципе набросал из STATIC'а...
но стандартным симпотичнее было бы...

Вроде кроме этого вопросов возникнуть не должно :-)

p.s. там если в исходнике чего лишнего... я его не целиком выкладываю... кое-что удаляю... все равно там всё тоже самое... но огрызки остаются...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Snake_B   Вопросы по WinApi...   6.05.2008 4:31
andriano   Если ты указал один из стандартных классов, то цве…   6.05.2008 10:47
Snake_B   А можно всё таки как-нибудь на примере? Теоретиче…   6.05.2008 14:16
volvo   Идея не самая удачная - учиться на том, что в прин…   6.05.2008 17:03
Snake_B   Идея не самая удачная - учиться на том, что в при…   6.05.2008 19:15
volvo   Легко... Но давай начнем с того, что тебе надо под…   6.05.2008 20:12
Snake_B   Легко... Но давай начнем с того, что тебе надо по…   7.05.2008 21:14
volvo   1. Можно: // Создаем прогрессбар myProgress :…   7.05.2008 22:08
Snake_B   Можно: // Создаем прогрессбар myProgress := C…   8.05.2008 2:46
volvo   Хочешь - вот проект полностью - у меня все работа…   8.05.2008 3:17
Snake_B   Хочешь - вот проект полностью - у меня все работа…   8.05.2008 4:05
volvo   Что значит "Ничего"? Программа запустила…   8.05.2008 4:22
Snake_B   Что значит "Ничего"? Программа запустил…   8.05.2008 4:31
andriano   А ты уверен что тебе нужно их именно уничтожать? С…   8.05.2008 10:10
Snake_B   А ты уверен что тебе нужно их именно уничтожать? …   8.05.2008 12:52
volvo   Хочешь, я присоединю исходник, проверишь его, боль…   8.05.2008 14:08
Snake_B   Хочешь, я присоединю исходник, проверишь его, бол…   8.05.2008 18:47
andriano   А по прогресс бару... ну и ладно... без него сдел…   8.05.2008 22:32
Snake_B   Вообще-то все, что нужно, можно сделать ручками. …   12.05.2008 2:55
volvo   var ListB1: HWND; i, len: integer; buffer:…   12.05.2008 3:11
Snake_B   Вот EXE-шник: (только там теперь по нажатию на к…   12.05.2008 4:48
volvo   :blink: Естественно... Окно получает сообщение WM…   12.05.2008 12:54
Snake_B   :blink: Естественно... Окно получает сообщение WM…   12.05.2008 15:31
volvo   У меня вот так прекрасно отработало: // Внимание …   16.05.2008 16:28
Snake_B   У меня вот так прекрасно отработало... Спасибо,…   17.05.2008 1:57
volvo   Вообще-то когда работаешь с PChar, надо быть остор…   17.05.2008 2:41
Snake_B   Новый вопросик... и мне кажется он где-то близко к…   24.05.2008 14:53
Snake_B   Новый вопросик... и мне кажется он где-то близко …   25.07.2008 7:12


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.04.2024 13:46
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name