Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2015-01-20 11:51:14 ЛС | профиль | цитата
NordWest писал(а):
А где про это почитать?
Я делал просто. Сторонним софтом смотрел ClassName и Caption и подставлял

А фиг его знает... Про аплета (и кто есть STATIC) я знаю, потому что KOL читал, что советом являться не может.
И я даже не знаю, почему он находит нашу форму по Caption... У аплета Caption тот же, для нашего случая.
А вспоминать стал, после того, как в Debug-ах нулевые хэндлы увидел.
Внимание: УВИДЕЛ. И не надо мне парить про "получаю ответы"
Да, "сторонний софт" - это выход, если он правильный. И он обязан был показать две формы и кучу STATIC.

NordWest писал(а):
Не знаю как это сделать.
Я определял, что работаю с нужным хендлом по тому, что получал ожидаемые данные посылая CB_GETCURSEL

Ну и что, что "не знаю". Мало ли какие сюрпризы дальше будут...
Вообще-то у каждого визульного элемента этот хэндл снизу торчит.
Поэтому, задачу можно поделить на две (если, конечно же, думать об этом): поиск хэндла (скажем, чужого приложения), и посылку сообщения.
Вторую можно решать (искать решение) независимо от первой. Например:
Add(MainForm,8334998,497,77)
{
Width=318
Height=364
Caption="Управление элементами окна"
Point(onKeyDown)
Point(Handle)
}
Add(Memo,9721830,623,350)
{
Left=20
Top=225
Width=260
Height=85
ScrollBars=2
}
Add(SendMessage,14481733,553,350)
{
Point(Message)
link(onSend,9721830:doAdd,[])
link(Handle,6140200:Var1,[])
link(WParam,11491058:Text,[])
link(LParam,9156883:Memory,[(573,306)(517,306)])
link(Message,10336840:Item,[])
}
Add(DoData,6923920,406,308)
{
link(onEventData,8878466:doEvent1,[])
link(Data,6225669:Text,[])
}
Add(Button,12440954,350,308)
{
Left=20
Top=175
Width=260
Caption="Отправить сообщение"
link(onClick,6923920:doData,[])
}
Add(IntegerArray,9153682,574,140)
{
IntArray=['CB_ADDSTRING'=323,'CB_DELETESTRING'=324,'CB_DIR'=325,'CB_FINDSTRING'=332,'CB_FINDSTRINGEXACT'=344,'CB_GETCOUNT'=326,'CB_GETCURSEL'=327,'CB_GETDROPPEDCONTROLRECT'=338,'CB_GETDROPPEDSTATE'=343,'CB_GETDROPPEDWIDTH'=351,'CB_GETEDITSEL'=320,'CB_GETEXTENDEDUI'=342,'CB_GETHORIZONTALEXTENT'=349,'CB_GETITEMDATA'=336,'CB_GETITEMHEIGHT'=340,'CB_GETLBTEXT'=328,'CB_GETLBTEXTLEN'=329,'CB_GETLOCALE'=346,'CB_GETTOPINDEX'=347,'CB_INITSTORAGE'=353,'CB_INSERTSTRING'=330,'CB_LIMITTEXT'=321,'CB_MSGMAX'=354,'CB_RESETCONTENT'=331,'CB_SELECTSTRING'=333,'CB_SETCURSEL'=334,'CB_SETDROPPEDWIDTH'=352,'CB_SETEDITSEL'=322,'CB_SETEXTENDEDUI'=341,'CB_SETHORIZONTALEXTENT'=350,'CB_SETITEMDATA'=337,'CB_SETITEMHEIGHT'=339,'CB_SETLOCALE'=345,'CB_SETTOPINDEX'=348,'CB_SHOWDROPDOWN'=335]
UseName=0
}
Add(ArrayRW,10336840,574,189)
{
link(Array,9153682:Array,[])
}
Add(Label,9341551,602,77)
{
Left=20
Top=90
Width=65
Height=17
Caption="Сообщение:"
}
Add(Label,15718932,651,77)
{
Left=20
Top=120
Width=41
Height=17
Caption="String"
}
Add(Label,5683312,700,77)
{
Left=195
Top=120
Width=60
Height=17
Caption="WParam"
}
Add(Edit,6225669,406,245)
{
Left=20
Top=140
Width=165
Text="Пункт2"
}
Add(Edit,11491058,560,245)
{
Left=190
Top=140
Width=65
Text="0"
DataType=2
}
Add(Label,8465279,749,77)
{
Left=20
Top=205
Width=37
Height=17
Caption="Ответ:"
}
Add(ChildPanel,6140200,553,77)
{
}
BEGIN_SDK
Add(EditMulti,1666175,21,21)
{
VarCount=1
link(Var1,13277300:Handle,[(27,180)(125,180)])
}
Add(Panel,12487912,49,70)
{
Left=20
Top=10
Width=262
Height=69
}
Add(ComboBox,13277300,105,126)
{
Left=150
Top=20
Width=95
Height=24
Strings=#6:Пункт1|6:Пункт2|6:Пункт3|
Text=""
Point(Handle)
}
Add(Label,12146243,105,70)
{
Left=10
Top=25
Width=136
Height=17
Caption="Объект для опытов:"
}
END_SDK
Add(ComboBox,4188647,497,182)
{
Left=90
Top=90
Width=190
Height=21
Strings=#12:CB_ADDSTRING|16:CB_DELETESTRING |6:CB_DIR|14:CB_FINDSTRING |19:CB_FINDSTRINGEXACT |11:CB_GETCOUNT|12:CB_GETCURSEL|25:CB_GETDROPPEDCONTROLRECT |19:CB_GETDROPPEDSTATE |19:CB_GETDROPPEDWIDTH |13:CB_GETEDITSEL|16:CB_GETEXTENDEDUI|23:CB_GETHORIZONTALEXTENT |14:CB_GETITEMDATA|17:CB_GETITEMHEIGHT |12:CB_GETLBTEXT|16:CB_GETLBTEXTLEN |12:CB_GETLOCALE|14:CB_GETTOPINDEX|14:CB_INITSTORAGE|15:CB_INSERTSTRING|12:CB_LIMITTEXT|10:CB_MSGMAX |16:CB_RESETCONTENT |15:CB_SELECTSTRING|12:CB_SETCURSEL|19:CB_SETDROPPEDWIDTH |14:CB_SETEDITSEL |16:CB_SETEXTENDEDUI|23:CB_SETHORIZONTALEXTENT |14:CB_SETITEMDATA|16:CB_SETITEMHEIGHT|12:CB_SETLOCALE|14:CB_SETTOPINDEX|15:CB_SHOWDROPDOWN|
Text="не выбрано"
link(onClick,10336840:doRead,[])
}
Add(MemoryStream,9156883,497,245)
{
Point(Memory)
}
Add(DataToFile,14836274,497,315)
{
Type=6
link(Stream,9156883:Stream,[])
}
Add(Hub,8878466,455,308)
{
OutCount=3
link(onEvent1,9156883:doClear,[(480,314)(480,258)])
link(onEvent2,14836274:doPut,[])
link(onEvent3,14481733:doSendMessage,[(480,328)(480,356)])
}

NordWest писал(а):
Вероятно после прочтения русского описания нужно просматривать и англоязычный вариант...
Тут, видимо, некто Платонов заложил в перевод "свой интеллект". Что делать следует чрезвычайно осторожно. Скажем, прилагательное "префиксный", относящееся к строке, видимо имеет семантику всего сообщения. Ну типа, будет найдено то, что начинается с такой строки. А нормальный человек будет думать, что это характеристика формата строки... Начнет гуглить "префиксную строку"... Может нагуглить, что паскалевские строки имеют своим префиксом длину.
А уж семантика термина "пустой символ"....

Мир докатился до того, что верить вообще никому нельзя...
Например, читаю Вирта, а там - "научная графомания"
Не говоря уже о менее известных авторах...
К сожалению...

NordWest писал(а):
А если ...
Все правильно.
Настолько, что doClear делает именно ЭТО, и ничего кроме ЭТОГО (P.Size := 0).
Это просто я в попыхах "не заметил" более простой точки.



В этом деле следует усвоить главное:
1) MemoryStream.Memory - пожалуй единственный у нас способ подставить "поинтер" в параметры для SendMessage. А там это часто надо...
2) Данные по этому "поинтеру" можно записать/прочитать с помощью DataToFile
3) Следует иметь ввиду, что, при изменении размеров стрима (например, при записи туда дополнительных данных) - этот "поинтер" легко может изменить свое значение. По научному - реаллоцироваться.
4) Собственно, и все.

карма: 9

0