Вверх ↑
Этот топик читают: Гость
Ответов: 2
Рейтинг: 0
#1: 2020-10-21 13:24:35 ЛС | профиль | цитата
Пытаюсь получит текст строки из LISTBOX схема уходит в рунтайм.


Add(ListBox,6998449,504,28)
{
Left=5
Top=335
Width=610
Height=355
Font=[MS Sans Serif,12,1,0,1]
Strings=#10:Строка 1 .|11:Строка 2 ..|12:Строка 3 ...|13:Строка 4 ....|
Point(Index)
Point(doSelect)
Point(onSelect)
Point(Handle)
Point(PHandle)
}
Add(SendMessage,14145821,532,161)
{
Message=13
Point(Message)
link(onSend,987624:doText,[])
link(Handle,6490718:Var2,[])
link(WParam,8551881:Var,[(545,122)(551,122)])
link(Message,3945192:Var,[(559,138)(568,138)])
}
Add(GlobalVar,3945192,562,101)
{
Name="LB_GETCOUNT: Integer = $18B;"
Data=Integer(395)
}
Add(GlobalVar,8551881,545,80)
{
Name="1"
Data=Integer(1)
}
Add(Button,1406896,343,161)
{
Left=205
Top=20
Width=130
Caption="Количество Стр"
link(onClick,11948046:doEvent1,[])
}
Add(Edit,987624,664,161)
{
Left=340
Top=20
Width=590
}
Add(Hub,11948046,476,161)
{
link(onEvent1,14145821:doSendMessage,[])
}
Add(SendMessage,4830632,469,497)
{
Message=13
Point(Message)
link(onSend,16133515:doText,[])
link(Handle,6490718:Var1,[(475,117)])
link(WParam,11175836:Var,[(482,460)(481,460)])
link(Message,9920424:Var,[(496,474)(505,474)])
}
Add(GlobalVar,9920424,499,437)
{
Name="LB_SETCURSEL: Integer = $186;"
Data=Integer(392)
}
Add(GlobalVar,11175836,475,409)
{
Name="1"
Data=Integer(1)
}
Add(Button,12995872,343,497)
{
Left=205
Top=70
Width=130
Caption="Выбранная Стр"
link(onClick,3930054:doEvent1,[])
}
Add(Edit,16133515,601,497)
{
Left=340
Top=70
Width=590
}
Add(Hub,3930054,413,497)
{
link(onEvent1,4830632:doSendMessage,[])
}
Add(GetDataEx,1803166,532,98)
{
link(Data,11171630:Var2,[])
}
Add(GetDataEx,6490718,532,112)
{
link(Data,1803166:Var2,[])
}
Add(SendMessage,6927793,518,301)
{
Message=13
Point(Message)
link(onSend,14013958:doText,[])
link(Handle,1803166:Var1,[(524,103)])
link(WParam,1038386:Var,[(531,262)(537,262)])
link(Message,4230707:Var,[(545,278)(554,278)])
}
Add(GlobalVar,4230707,548,241)
{
Name="LB_SELECTSTRING: Integer = $18C;"
Data=Integer(390)
}
Add(GlobalVar,1038386,531,220)
{
Name="2"
Data=Integer(2)
}
Add(Button,12937074,343,301)
{
Left=205
Top=45
Width=130
Caption="Выбрать Стр"
link(onClick,1211021:doEvent1,[])
}
Add(Edit,14013958,650,301)
{
Left=340
Top=45
Width=590
}
Add(Hub,1211021,462,301)
{
link(onEvent1,6927793:doSendMessage,[])
}
Add(SendMessage,11971428,385,798)
{
Message=13
Point(Message)
link(onSend,2203774:doText,[])
link(Handle,11171630:Var1,[(391,89)])
link(WParam,8594871:Var,[(398,761)(411,761)])
link(Message,14111385:Var,[(412,775)(421,775)])
}
Add(GlobalVar,14111385,415,738)
{
Name=" LB_GETTEXT: Integer = $189;"
Data=Integer(393)
}
Add(GlobalVar,8594871,405,710)
{
Name="1"
Data=Integer(1)
}
Add(Button,7299247,266,798)
{
Left=205
Top=120
Width=130
Caption="Текс Стр"
link(onClick,8662094:doEvent1,[])
}
Add(Edit,2203774,517,798)
{
Left=340
Top=120
Width=590
}
Add(Hub,8662094,329,798)
{
link(onEvent1,11971428:doSendMessage,[])
}
Add(GetDataEx,11171630,532,84)
{
link(Data,5279890:Var2,[])
}
Add(SendMessage,5442742,462,644)
{
Message=13
Point(Message)
link(onSend,7180028:doText,[])
link(Handle,5279890:Var1,[(468,75)])
link(WParam,5456717:Var,[(475,607)(474,607)])
link(Message,5907470:Var,[(489,621)(498,621)])
}
Add(GlobalVar,5907470,492,584)
{
Name="LB_GETTEXTLEN: Integer = $18A;"
Data=Integer(394)
}
Add(GlobalVar,5456717,468,556)
{
Name="3"
Data=Integer(3)
}
Add(Button,6898713,343,644)
{
Left=205
Top=95
Width=130
Caption="Длинс Стр"
link(onClick,2095071:doEvent1,[])
}
Add(Edit,7180028,594,644)
{
Left=340
Top=95
Width=590
}
Add(Hub,2095071,406,644)
{
link(onEvent1,5442742:doSendMessage,[])
}
Add(GetDataEx,5279890,532,70)
{
link(Data,6998449:Handle,[])
}


Winapi Брал тут http://docwiki.embarcadero.com/Libraries/XE2/en/Winapi.Messages
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 25654
Рейтинг: 2085
#2: 2020-10-21 13:44:10 ЛС | профиль | цитата
Вот такой кусок схемы надо воткнуть от кнопки до Edit

Часть Схемы


Add(Button,7299247,224,966)
{
Left=25
Top=115
Width=130
Caption="Текс Стр"
link(onClick,5834539:doData,[])
}
Add(Edit,2203774,595,973)
{
Left=160
Top=115
Width=590
}
Add(SendMessage,15421399,434,980)
{
Point(Message)
link(onSend,13414976:doGet,[])
link(WParam,8594871:Var,[(447,922)(405,922)])
link(LParam,14189995:Memory,[(454,964)(510,964)])
link(Message,14111385:Var,[])
}
Add(MemoryStream,14189995,490,917)
{
Point(Memory)
Point(doSize)
}
Add(DataToFile,13414976,490,973)
{
Type=6
link(onGet,2203774:doText,[])
link(Stream,14189995:Stream,[])
}
Add(Hub,8233292,378,966)
{
OutCount=3
link(onEvent1,14189995:doClear,[(420,972)(420,930)])
link(onEvent2,14189995:doSize,[(426,979)(426,937)])
link(onEvent3,15421399:doSendMessage,[])
}
Add(GlobalVar,14111385,455,882)
{
Name=" LB_GETTEXT: Integer = $189;"
Data=Integer(393)
}
Add(DoData,5834539,308,966)
{
Data=Integer(100000)
link(onEventData,8233292:doEvent1,[])
}
Add(GlobalVar,8594871,399,882)
{
Name="1"
Data=Integer(1)
}
карма: 19

0
Ответов: 4308
Рейтинг: 670
#3: 2020-10-21 13:47:14 ЛС | профиль | цитата
LParam в сообщении LB_GETTEXT должен указывать на предварительно подготовленный буфер достаточной длины, в который будет помещена строка.

Add(GlobalVar,8594871,469,882)
{
Name="1"
Data=Integer(1)
}
Add(MainForm,2953706,21,105)
{
Width=680
Height=523
Position=1
}
Add(ListBox,6998449,581,189)
{
Left=20
Top=190
Width=610
Height=265
Font=[MS Sans Serif,12,1,0,1]
Strings=#10:Строка 1 .|11:Строка 2 ..|12:Строка 3 ...|13:Строка 4 ....|
Point(Index)
Point(doSelect)
Point(onSelect)
Point(Handle)
Point(PHandle)
}
Add(SendMessage,14145821,609,322)
{
Message=13
Point(Message)
link(onSend,987624:doText,[])
link(Handle,6490718:Var2,[])
link(WParam,8551881:Var,[(622,283)(622,283)])
link(Message,3945192:Var,[(636,299)(643,299)])
}
Add(GlobalVar,3945192,637,259)
{
Name="LB_GETCOUNT: Integer = $18B;"
Data=Integer(395)
}
Add(GlobalVar,8551881,616,238)
{
Name="1"
Data=Integer(1)
}
Add(Button,1406896,420,322)
{
Left=25
Top=20
Width=130
Caption="Количество Стр"
link(onClick,11948046:doEvent1,[])
}
Add(Edit,987624,735,322)
{
Left=160
Top=20
Width=100
}
Add(Hub,11948046,553,322)
{
link(onEvent1,14145821:doSendMessage,[])
}
Add(SendMessage,4830632,546,658)
{
Message=13
Point(Message)
link(onSend,16133515:doText,[])
link(Handle,6490718:Var1,[(552,278)])
link(WParam,11175836:Var,[(559,621)(552,621)])
link(Message,9920424:Var,[(573,635)(580,635)])
}
Add(GlobalVar,9920424,574,595)
{
Name="LB_SETCURSEL: Integer = $186;"
Data=Integer(392)
}
Add(GlobalVar,11175836,546,567)
{
Name="1"
Data=Integer(1)
}
Add(Button,12995872,420,658)
{
Left=25
Top=70
Width=130
Caption="Выбранная Стр"
link(onClick,3930054:doEvent1,[])
}
Add(Edit,16133515,672,658)
{
Left=160
Top=70
Width=100
}
Add(Hub,3930054,490,658)
{
link(onEvent1,4830632:doSendMessage,[])
}
Add(GetDataEx,1803166,609,259)
{
link(Data,11171630:Var2,[])
}
Add(GetDataEx,6490718,609,273)
{
link(Data,1803166:Var2,[])
}
Add(SendMessage,6927793,595,462)
{
Message=13
Point(Message)
link(onSend,14013958:doText,[])
link(Handle,1803166:Var1,[(601,264)])
link(WParam,1038386:Var,[(608,423)(608,423)])
link(Message,4230707:Var,[(622,439)(629,439)])
}
Add(GlobalVar,4230707,623,399)
{
Name="LB_SELECTSTRING: Integer = $18C;"
Data=Integer(390)
}
Add(GlobalVar,1038386,602,378)
{
Name="2"
Data=Integer(2)
}
Add(Button,12937074,420,462)
{
Left=25
Top=45
Width=130
Caption="Выбрать Стр"
link(onClick,1211021:doEvent1,[])
}
Add(Edit,14013958,721,462)
{
Left=160
Top=45
Width=100
}
Add(Hub,1211021,539,462)
{
link(onEvent1,6927793:doSendMessage,[])
}
Add(SendMessage,11971428,462,1064)
{
Message=13
Point(Message)
link(onSend,15087738:doEvent1,[])
link(Handle,11171630:Var1,[(468,250)])
link(WParam,8594871:Var,[])
link(LParam,4569105:Memory,[(482,1038)(748,1038)])
link(Message,14111385:Var,[])
}
Add(GlobalVar,14111385,483,973)
{
Name="LB_GETTEXT: Integer = $189;"
Data=Integer(393)
}
Add(Button,7299247,252,1057)
{
Left=25
Top=120
Width=130
Caption="Текс Стр"
link(onClick,8662094:doEvent1,[])
}
Add(Edit,2203774,784,1071)
{
Left=160
Top=120
Width=100
}
Add(Hub,8662094,315,1057)
{
link(onEvent1,13475432:doEvent1,[(405,1063)(405,1007)])
link(onEvent2,11971428:doSendMessage,[])
}
Add(GetDataEx,11171630,609,245)
{
link(Data,5279890:Var2,[])
}
Add(SendMessage,5442742,539,805)
{
Message=13
Point(Message)
link(onSend,7180028:doText,[])
link(Handle,5279890:Var1,[(545,236)])
link(WParam,5456717:Var,[(552,768)(545,768)])
link(Message,5907470:Var,[(566,782)(573,782)])
}
Add(GlobalVar,5907470,567,742)
{
Name="LB_GETTEXTLEN: Integer = $18A;"
Data=Integer(394)
}
Add(GlobalVar,5456717,539,714)
{
Name="3"
Data=Integer(3)
}
Add(Button,6898713,420,805)
{
Left=25
Top=95
Width=130
Caption="Длинс Стр"
link(onClick,2095071:doEvent1,[])
}
Add(Edit,7180028,665,805)
{
Left=160
Top=95
Width=100
}
Add(Hub,2095071,483,805)
{
link(onEvent1,5442742:doSendMessage,[])
}
Add(GetDataEx,5279890,609,231)
{
link(Data,6998449:Handle,[])
}
Add(MemoryStream,4569105,728,987)
{
Point(Memory)
Point(doSize)
}
Add(DoData,10559745,665,1001)
{
@Hint=#65:Должен быть установлен в размер, достаточный для помещения строки|15:(LB_GETTEXTLEN)|
Data=Integer(100)
link(onEventData,4569105:doSize,[])
AddHint(-87,-87,198,39,@Hint)
}
Add(Hub,15087738,518,1064)
{
link(onEvent1,13475432:doEvent2,[(560,1070)(560,1014)])
link(onEvent2,2521060:doConvert,[])
}
Add(InfoTip,12068297,567,1043)
{
Info=#16:Подгонка размера|
Width=148
Height=18
}
Add(Hub,13475432,588,1001)
{
InCount=2
OutCount=1
link(onEvent1,10559745:doData,[])
}
Add(StreamConvertor,2521060,728,1071)
{
Mode=6
Point(Data)
link(onResult,2203774:doText,[])
link(Data,4569105:Stream,[])
}
карма: 23

0
Разработчик
Ответов: 25654
Рейтинг: 2085
#4: 2020-10-21 14:17:12 ЛС | профиль | цитата
Netspirit, а что будет, если в твоей схеме повторно считать другую строку, которая короче? Кто память очищать-то будет, автоочистка не работает через нижнюю точку? Или пофиг, тк там строка с нулевым символом в конце?

Редактировалось 2 раз(а), последний 2020-10-21 15:16:54
карма: 19

0
Ответов: 4308
Рейтинг: 670
#5: 2020-10-21 15:33:56 ЛС | профиль | цитата
Другая строка запишется в начало буфера, перезаписав всё что там было. Последующая установка размера подгонит впритык. Можно использовать LB_GETTEXTLEN для более точной установки размера.
В целом твой вариант требует меньше перевыделений памяти, так что более оптимальный. Можно ещё улучшить, если установить один раз заведомо больший размер, а затем после чтения сбрасывать Position вместо doClear.
карма: 23

0
Ответов: 2
Рейтинг: 0
#6: 2020-10-21 16:55:20 ЛС | профиль | цитата
Благодарю! Вопрос исчерпан.
карма: 0

0
Ответов: 4636
Рейтинг: 510
#7: 2020-10-21 20:12:02 ЛС | профиль | цитата
А исчерпан он просто тем что из чужих листбоксов просто так данные не спереть

p.s вот как вас только не разоводят а Вы всё в гуру играете
карма: 6

0
7
Сообщение
...
Прикрепленные файлы
(файлы не залиты)