-
Zalum (12.05.09 14:36) [0]Удалено модератором
Примечание: Не устал ветки плодить? -
Юрий Зотов © (12.05.09 14:56) [1]1. > как быть, если мне нужно передать несколько параметров
Можно так, как Вы делаете, но если передаются параметры разных типов, то возникнут сложности с их выделением. В этом случае можно упаковать все параметры в массив байт (формат: тип, длина, тело...), а размер и адрес массива передавать через WM_COPYDATA.
Тип - это число, например: 1 - Integer, 2 - Boolean, 3 - String и т.д.
2. > как тогда уже принятые значения разбросать по разным переменным
Для массива байт - в цикле (while Position < Size):
- читаем тип, берем соответсвующую переменную;
- читаем длину (если тип не имеет фиксированную длину)
- читаем тело
Для строк - использовать комбинацию Pos + Copy + Delete, либо так:
StringList.Text := строка_с_разделителями_#13#10 -
Zalum (12.05.09 15:09) [2]Нашел выход из ситуации, хотя может и коряво, но работает:
передаю параметры:HForm := FindWindow(PChar('TMainForm'), 0);
with ParamCmd do
begin
dwData := 0;
cbdata := strlen(pchar(ParamStr(1)+#13+ParamStr(2)))+1;
lpData := pchar(ParamStr(1)+#13+ParamStr(2) );
end;
SendMessage(HForm,WM_COPYDATA,application.Handle,Longint(@ParamCmd));
принимаю
procedure TMainForm.Getmessage(var msg: TWMCopyData);
var
stext:array[0..99] of Char;
begin
StrLCopy
(stext,Msg.CopyDataStruct.lpData,Msg.CopyDataStruct.cbData) ;
for i:=0 to Length(stext) do begin
if isDelimiter(#13,stext,i) then
begin
a1:=Copy(stext,0,i-1);
a2:= Copy(stext,i+1,Length(stext));
end;
end;
ShowMessage('первый:'+a1+'второй:'+a2);
end;