![]() |
Delphi+API
SendMessage(hEdit,EM_GETLINE, 0, chBuff);
// pBuff:=@chBuff; // GetMem(pBuff,chBuff); MessageBox(MainWnd, pBuff, 'Win Min', MB_OK); Проблемка: требуется из строки передать введенный текст и выдать в окно сообщения. Примерчик выше. Кто знает подскажите. PS выдается пустота. |
em_GetLine
Возвращает одну строку из органа управления редактированием. Возвращается фактически переданное в буфер число байт, пустой символ завершения к концу буфера не добавляется. Это сообщение относится к многострочным органам управления редактированием. em_GetHandle Возвращает описатель буфера органа управления редактированием. Буфер содержит текст органа управления редактированиея. Не используются w и l параметры. Работает только для органа управления редактированием, созданного со стилем ds_LocalEdit. Чето, либо я туплю либо еще что-то :) Но у меня не вышло привинтить указатель и получить текст, хотя ИМХО собака тут порылась в мессаге... Как справишься - обязательно выложи код... тока с варами. |
Ну не знаю, вот пишу на С++Builder, всё работает. На форме TEdit и TButton...
Код:
void __fastcall TForm1::Button1Click(TObject *Sender) |
ЕЖ мне нужно на Делфи именно. и на чистом API. насколько возможно.
Ниже текст самого кода. Он несет только ознакомительный характер. образец. Код:
program winmin; |
Цитата:
|
ЕЖ
Цитата:
Цитата:
Цитата:
Ты бы мог бы предложить вариант решения проблемки :) В оригинале на си было так: SendMessage( hEdit,EM_GETLINE, 0, (LPARAM)chBuff); MessageBox(hwnd, chBuff, szTitle, MB_OK); (LPARAM)chBuff это вроде объявление переменной. Но во второй функции переменная chBuff должна быть строкового типа. Вот я и пытался решить эту загвоздку, как преобразовать в совместимые типы в одной функции и в другой. |
Цитата:
Указатель любого типа который ты пользуешь в Delphi - это обычная переменная размером 4 байта - можешь считать её типом integer. Любой адрес, представляемый указателем, это 4-х байтовое число. Это число и хранится в 4-х байтах переменной указателя. Сами эти байты 4 байта содержимого переменной-указателя тоже, естественно, находятся по какому то 4-х байтовому адресу в памяти. В chBuff у тебя должен быть указатель на последовательный набор получаемых символов (т.е. байт). Т.е. в chBuff находится адрес первого из этих символов в памяти. Делая pBuff:=@chBuff ты получаешь в pBuff не адрес этого первого символа строки, а адрес переменной chBuff. Получается указатель на указатель. А тебе надо лишь чтобы в pBuff и в chBuff был один и тот же адрес. Разница лишь в том что т.к. chBuff указатель на char, то сhBuff^ интерпретируется байт, а pBuff^ будет интерпретироваться как 4 байта - это зависит от типа указателя при его объявлении. Тип Pointer - универсальный (в С - это void), т.е. может принимать значение указателя любого другого типа. Попробуй так: Код:
var |
Цитата:
Проблемка разрешилась следующим образом: Цитата:
SendMessage(hEdit,WM_GETTEXT, 255, Integer(@chBuff)); Так же взял параметр WM_GETTEXT. Так нормально работает. И добавляется 255 (количество извлекаемых символов, как я понял). Т.е. если пишешь 5 извлечется 4, на единицу меньше. И резервирование памяти не потребовалось. |
| Часовой пояс GMT +4, время: 22:16. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.