![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как в SendMessage передать строку? [D7, XP]
tytus © (2008-05-15 12:00:00)Добрый день всем. Есть такой код:
const CX_MYMESSAGE = WM_USER+40;
...
private
procedureCXMYMESSAGE(var Message: TMessage); messageCX_MYMESSAGE;
...
procedureTMainFm.CXMYMESSAGE( var Message: TMessage);
begin
Message.WParam:=Integer(PChar(Edit1.Text));
end;
теперь как получить текст из едита используя SendMessage?
SendMessage(MainFm. Handle,CX_MY_MESSAGE,????,0);
Slym (2008-05-15 14:09:00) [21]1. tytus (15.05.08 14:03) [16]
Move я делал, только забыл установить размер S перед этим
о... это плохо... это очень плохо!
2. tytus (15.05.08 14:03) [16]
Для чнго собственно и служит if LParam<Result then exit;
чтоб не сmoveить больше чем под него место выделено и если этого не сделать goto 1;
3. tytus (15.05.08 14:03) [16]
для чего и потребовалось два раза SendMessage
первый раз узнаем необходимую длинну, и растягиваем S
второй раз чтоб S заполнить
Игорь Шевченко (2008-05-15 14:06:00) [22]tytus (15.05.08 14:03) [16]
читай http://ln.com.ua/~openxs/articles/smart-questions-ru.html,
учись правильно задавать вопросы
Slym (2008-05-15 14:04:00) [23]Игорь Шевченко © (15.05.08 13:57) [15]
это типа ответ :) на сабж... конечно спорно его применение, но ответ :)
можно не городить отсебятины и сделать так:
SetLength(S,1024);
SetLength(S,SendMessage(Edit1.Handle,WM_GETTEXT,Length(S),PChar(S)));
или так
s:=Edit1.Text
почему автору не подходит последний вариант я низнаю :)
tytus (2008-05-15 14:03:00) [24]>Игорь Шевченко © (15.05.08 13:57) [15]
человек ответил на мой вопрос.
>Slym © (15.05.08 13:50) [13]
так тоже работает.
Move я делал, только забыл установить размер S перед этим.
Для чнго собственно и служитif LParam<Result then exit;
для чего и потребовалось два разаSendMessage
по поводу Игорь Шевченко © (15.05.08 12:56) [5]
тоже согласен.
Всем спасибо.
Игорь Шевченко (2008-05-15 13:57:00) [25]Slym © (15.05.08 13:50) [13]
Slym © (15.05.08 13:51) [14]
Чего сказать-то хотел ?
Slym (2008-05-15 13:51:00) [26]Slym © (15.05.08 13:50) [13]
procedure TMainFm.FormCreate(Sender: TObject);
var S:string;
begin
SetLength(S,SendMessage(Handle,CX_MY_MESSAGE,0,0));
SetLength(S,SendMessage(Handle,CX_MY_MESSAGE,PChar(S),Length(S)));
end;
Slym (2008-05-15 13:50:00) [27]
procedure TMainFm.CXMYMESSAGE(var Message: TMessage);
begin
with Message do
begin
Result:=Length(Edit1.Text);
if LParam<Result then exit;
Move(PChar(Edit1.Text)^,PChar(WParam)^,Result);
end;
end;
procedure TMainFm.FormCreate(Sender: TObject);
var S:string;
begin
SetLength(S,SendMessage(Handle,CX_MY_MESSAGE,0,0));
SendMessage(Handle,CX_MY_MESSAGE,PChar(S),Length(S));
end;
Игорь Шевченко (2008-05-15 13:46:00) [28]
> Тогда зачем вот эта дурь
Коммутативность оператора присваивания
Reindeer Moss Eater (2008-05-15 13:39:00) [29]Message.WParam:=...??? - что-то не "въезжаю"
А PChar к интегеру ты наверное так делал?
Pchar(MyString) := Msg.WParam;
Не так?
Тогда зачем вот эта дурь: Message.WParam:=
?
Reindeer Moss Eater (2008-05-15 13:36:00) [30]Про присвоение тебе никто ничего не говорил (только спрашивали)
А говорили тебе про приведение.
tytus (2008-05-15 13:30:00) [31]>Reindeer Moss Eater © (15.05.08 13:10) [7]
Привел указатель на строку к интегеру при отправке.
SendMessage(Handle,CX_CLIENTIP,Integer(PChar(s)),0);
так?
Приведи интегер к указателю на строку при приеме
Message.WParam:=...??? - что-то не "въезжаю"
Игорь Шевченко (2008-05-15 13:24:00) [32]
> а ответа так и нет....
До тех пор, пока ты не ответишь на вопрос в [5], его и не будет
Reindeer Moss Eater (2008-05-15 13:10:00) [33]Привел указатель на строку к интегеру при отправке.
Приведи интегер к указателю на строку при приеме (если сама строка еще жива).
Какие проблемы-то?
tytus (2008-05-15 13:02:00) [34]>Игорь Шевченко © (15.05.08 12:56) [5]
а ответа так и нет....
Игорь Шевченко (2008-05-15 12:56:00) [35]tytus (15.05.08 12:29) [2]
Ты чего вообще хочешь добиться ?
Изменять параметры сообщения в его обработчике - это настолько бессмысленно, что даже не комментируется
tytus (2008-05-15 12:46:00) [36]>Хитрий Лис (15.05.08 12:44) [3]
смысл тут прост:
захотелось мне в сообщении передать строку...
Хитрий Лис (2008-05-15 12:44:00) [37]А в чём тайный смысл ? может поделитесь к чему всё это ?
tytus (2008-05-15 12:29:00) [38]>Игорь Шевченко © (15.05.08 12:18) [1]
согласен ..
вот такой код работает:
type
PMyStr = ^TMyStr;
TMyStr = record
MyLen:integer;
MyStr:PAnsiChar;
end;
...
procedureTMainFm.CXCLIENTIP( var Message: TMessage);
begin
PMyStr( Message.WParam)^.MyLen:=Length(Edit1.Text);
PMyStr( Message.WParam)^.MyStr:=PChar(Edit1.Text);
Message.Result:=1;
end;
procedureTMainFm.Edit1KeyDown(Sender: TObject; varKey: Word;
Shift: TShiftState);
var
s: string;
MyStr:PMyStr;
len:integer;
begin
ifKey=VK_RETURN then
begin
GetMem(MyStr,SizeOf(TMyStr));
ZeroMemory(MyStr,SizeOf(TMyStr));
try
SendMessage(Handle,CX_CLIENTIP,Integer(MyStr),0);
len:=MyStr.MyLen;
s:=StrPas(MyStr.MyStr);
finally
FreeMem(MyStr);
end;
RE1.Lines.Add(s);
end;
end;
Игорь Шевченко (2008-05-15 12:18:00) [39]
> procedure TMainFm.CXMYMESSAGE(var Message: TMessage);
> begin
> Message.WParam:=Integer(PChar(Edit1.Text));
> end;
Фигня