Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Народ помогите с WinAPI
Посл.ответ Сообщение

Ранг: 11.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 18 сентября 2007 00:20
· Личное сообщение · #1

Млин задолбался, ничего толком не нашел, может вы подскажите, пишу на API, форма - 2 кнопки и Edit, по нажатию первой кнопки - текст из Edita нужно загнать в переменную ловлю ступор уже третий день подскажите ПЛЗ, исходник ниже.......



program Project1;

uses
windows, messages, commctrl;

var
WinClass : TWndClass; //переменная класса TWndClass для создания главного окна
hInst : HWND; //хандлер приложения
Handle : HWND; //локальный хандлер
Com1 : HWND; //TButton
Com2 : HWND; //TButton
Com3 : HWND; //TEdit
Msg : TMSG; //сообщение
hFont : HWND; //хандлер шрифта

const
id_1 = 1; //TButton
id_2 = 2; //TButton
id_3 = 3; //TEdit



procedure ShutDown;
begin
DeleteObject(hFont);
UnRegisterClass('Sample Class', hInst);
ExitProcess(hInst);
end;

procedure BOkClick(HW:HWND);
var s:string;
begin
// В переменную S присваивается текст из Edit

MessageBox(hw,pchar(s),'Button Ok',MB_OK);
end;
procedure BCancelClick;
begin
ShutDown;
end;
function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений
begin
Result := DefWindowProc(hwnd, msg, wparam, lparam);
case Msg of

WM_COMMAND:
case LoWord(wParam) of
id_1 : if HiWord(wParam) = bn_Clicked then BCancelClick;
id_2 : if HiWord(wParam) = bn_Clicked then BOkClick(hwnd);
end;
WM_DESTROY:ShutDown;
end;
end;

begin
hInst := GetModuleHandle(nil);
with WinClass do
begin
Style := CS_PARENTDC; //стиль класса главного окна
hIcon := LoadIcon(hInstance, IDI_WINLOGO); //иконка программы
lpfnWndProc := @WindowProc; //назначение обработчика сообщений
hInstance := hInst;
hbrBackground := COLOR_BTNFACE + 1; //цвет окна
lpszClassName := 'Sample Class'; //класс окна
hCursor := LoadCursor(0, IDC_ARROW); //активный курсор
end;
InitCommonControls;
RegisterClass(WinClass); //регистрация класса в системе

{Создание главного окна программы}
Handle := CreateWindowEx(0, 'Sample Class', 'Loader',
WS_OVERLAPPED or WS_SYSMENU or
WS_VISIBLE,
244, 127, 180, 80,
0, 0,
hInst, nil);

{Создание шрифта}
hFont := CreateFont(
-12, 0, 0, 0, 0, 0, 0, 0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');

Com1 := CreateWindow(
'Button',
'Cancel',
WS_CHILD or BS_TEXT or WS_VISIBLE,
5, 23, 82, 29,Handle, id_1, hInst, nil);
SendMessage(Com1,WM_SETFONT,hFont,0);

Com2 := CreateWindow(
'Button',
'OK',
WS_CHILD or BS_TEXT or WS_VISIBLE,
87, 23, 84, 29,Handle, id_2, hInst, nil);
SendMessage(Com2,WM_SETFONT,hFont,0);

Com3:=CreateWindowEx(
WS_EX_CLIENTEDGE,
'Edit',
'' ,
WS_CHILD or ES_AUTOHSCROLL or WS_VISIBLE,
5,3,166,21,Handle, id_3, hInst,nil);
SendMessage(Com3,WM_SETFONT,hFont,0);

//Цикл сбора сообщений
while(GetMessage(Msg, Handle, 0, 0)) do
begin
TranslateMessage(Msg); //прием сообщений
DispatchMessage(Msg); //удаление сообщений из очереди
end;
end.



Ранг: 11.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 18 сентября 2007 02:07
· Личное сообщение · #2

Оф топик.

var s:string;
TextLen:Integer;

Begin
TextLen:=SendMessage(Com3,WM_GetTextLength,0,0);
SetLength(s,TextLen);
SendMessage(Com3,WM_GetText,TextLen+1,LParam(s));
MessageBox(hw,pchar(s),'Button Ok',MB_OK);
end;



Ранг: 72.4 (постоянный), 33thx
Активность: 0.050.03
Статус: Участник

Создано: 18 сентября 2007 04:03
· Личное сообщение · #3

или
GetWindowText, но тогда нада чтоб было s не string а array[0..512] of например char



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 20 сентября 2007 09:15
· Личное сообщение · #4

Попробуй так
SendMessage(Com3,WM_GetText,TextLen+1,LParam(s[1]));




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 20 сентября 2007 11:02
· Личное сообщение · #5

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

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 20 сентября 2007 11:19 · Поправил: Guru_eXe
· Личное сообщение · #6

ValdikSS пишет:
а array[0..512] of например char

можно pchar, вместо всяких массивов

-----
may all your PUSHes be POPed!




Ранг: 47.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 20 сентября 2007 16:11
· Личное сообщение · #7

Guru_eXe пишет:
можно pchar, вместо всяких массивов

Чтоб PСhar юзать - придётся память выделять под строку, т. к. ты только указатель описываешь, а с массивом память получается уже выделена.




Ранг: 282.8 (наставник), 24thx
Активность: 0.260
Статус: Участник
win32.org.ru

Создано: 20 сентября 2007 16:32
· Личное сообщение · #8

GetWindowTextLengthA + GetMem + GetWindowText

-----
may all your PUSHes be POPed!




Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 20 сентября 2007 17:01
· Личное сообщение · #9

Столько шума из-за какого то GetWindowText ))

-----
Security through obscurity is just an illusion





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 21 сентября 2007 21:00
· Личное сообщение · #10

что-то топик-мейкер молчит.
подсказывать ещё что-нить или нет....



Ранг: 46.9 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 23 сентября 2007 07:57
· Личное сообщение · #11

Вот кстати прога для "быстрого создания формы",по виду так ниче но делать авторам еще до****.
piddlesoft.narod.ru/prj/apix/index.html




Ранг: 279.1 (наставник)
Активность: 0.160
Статус: Участник
wizard

Создано: 23 сентября 2007 22:25
· Личное сообщение · #12

Zloy пишет:
Вот кстати прога для "быстрого создания формы",по виду так ниче но делать авторам еще до****.


Ничё нормальная штука , для новичков самое то.

-----
Что один человек сделал , другой всегда сломать может...




Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 23 сентября 2007 23:15
· Личное сообщение · #13

Если уже про Edit речь зашла, задам свой вопрос (тоже глупый).
Нужно для кейгена (ввода серийки).
Можно ли при создании Edit задать макс. кол-во символов ?
Или нужно обрабатывать каждое нажатие кнопки в Edit и проверять кол-во уже введённых ?



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 24 сентября 2007 00:04
· Личное сообщение · #14

SergX пишет:
Можно ли при создании Edit задать макс. кол-во символов ?



EM_LIMITTEXT
EM_SETLIMITTEXT
www.wasm.ru/forum/viewtopic.php?id=7287



Ранг: 38.6 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 24 сентября 2007 00:07
· Личное сообщение · #15

SergX пишет:
Или нужно обрабатывать каждое нажатие кнопки в Edit и проверять кол-во уже введённых

Можно и так.
Если при создании Edit'а не задан стиль WS_VSCROLL, то количество вводимых символов ограничивается размерами edit'а(т.е. более чем помешается на экране не ввести)



Ранг: 6.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 сентября 2007 00:56
· Личное сообщение · #16

SergX
у меня так:
SendMessage(HandleEdit, $c5, MaxLength, 0);


 eXeL@B —› Программирование —› Народ помогите с WinAPI
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати