Page 1 of 1
Вопрос по ResizePic...
Posted: 15.08.2012 14:41
by Papr1ka
Ребят Привет! Помогите с таким вопросом...
Заношу в текстовый список TL ВСЁ содержимое гампа, в появившемся окне интересуют координаты X и Y
ResizePics: X Y ID Width Height Page ElemNum
0 ResizePic: 180 140 5170 240 240 0 7
Как их вытащить в свою программу?? Просто в зависимости от них у меня будет использоваться та или иная GumpButton )
Спасибо за помощь

Re: Вопрос по ResizePic...
Posted: 15.08.2012 15:35
by Vizit0r
Re: Вопрос по ResizePic...
Posted: 15.08.2012 16:20
by Papr1ka
А сможешь подсказать что это все обозначает?
a := Copy(GumpLines.Strings,Pos(' 1 0 ',GumpLines.Strings)+8,Length(GumpLines.Strings)-1);
Delete(a,Pos(' ',a),Length(a));
Вот с этой Pos не понятно...
Re: Вопрос по ResizePic...
Posted: 15.08.2012 17:22
by Papr1ka
Нашел обозначение, но вставить свои исходные данные не могу ((
Функция Copy(s,p,k) возвращает фрагмент строки s, который начинается в позиции p и имеет длину k.
Функция Pos(s1,s) ищет первое вхождение подстроки s1 в строку s и возвращает номер первого символа s1 в строке s или 0 если не нашли.
Процедура Delete(s,p,k) удаляет из строки s фрагмент, который начинается в позиции p и имеет длину k.
Re: Вопрос по ResizePic...
Posted: 15.08.2012 20:09
by Vizit0r
а никто не говорил, что строковые парсеры - это легко

Re: Вопрос по ResizePic...
Posted: 16.08.2012 20:20
by Papr1ka
Поясни пожалуйста это - Pos(' 1 0 ',GumpLines.Strings)+8...
Интересует что это за 1 0 и в какой это строке и про +8 тоже интересно...
Re: Вопрос по ResizePic...
Posted: 16.08.2012 23:57
by nah nah
как-то так
Code: Select all
gump = GetGumpFullLines(GetGumpsCount() - 1)
for string in gump:
if 'ResizePic:' in string:
x = int(string.split(3))
y = int(string.split(4))
Re: Вопрос по ResizePic...
Posted: 17.08.2012 0:40
by nah nah
Papr1ka wrote:Поясни пожалуйста это - Pos(' 1 0 ',GumpLines.Strings)+8...
Интересует что это за 1 0 и в какой это строке и про +8 тоже интересно...
Papr1ka wrote:Функция Copy(s,p,k) возвращает фрагмент строки s, который начинается в позиции p и имеет длину k.
pos в данном случае ищет подстроку ' 1 0 ' в строке GumpLines.Strings, если находит, возвращает номер первой буковки подстроки в строке =D (тоесть оно стане p в copy, потом позиция сдвигается на 8 символов вправо)
ЗЫ Причитал то, что сам написал и понял, что никто ни чего не поймёт, но всё же отвечу =D
Re: Вопрос по ResizePic...
Posted: 17.08.2012 6:58
by Vizit0r
мне лень брать гамп с моего шарда, вот с соседнего топика пример гамповых кнопок.
Code: Select all
GumpButtons: X Y Released_ID Pressed_ID Quit Page_ID Return_value Page
0 GumpButton: 241 70 4005 4007 1 0 10 0
1 GumpButton: 241 95 4005 4007 1 0 11 0
2 GumpButton: 241 120 4005 4007 1 0 12 0
Code: Select all
Pos(' 1 0 ',GumpLines.Strings[i])+8
нашел в строке позицию ' 1 0 ', и к этой позиции прибавил 8 - получается как раз позиция начала Return_value, что мне и надо было вырвать.
Впрочем, сейчас это все уже ненадо, после того как CFA добавил в скрипты функцию GetGumpInfo, с которой громоздкие строковые парсеры уже нафиг ненужны.
если в твоей версии это уже есть, то напишу пример попозже сегодня, если нет - напишу когда выложу новую версию на выходных.
Re: Вопрос по ResizePic...
Posted: 17.08.2012 17:10
by Papr1ka
Вот смотрите что получилось...Правда выдает ошибку - Not in a loop в 30 строке, это Break, который после waitgump...
procedure GetB;
var
GumpLines : TStringList;
a : String;
ButtonStringStart,i,Butt_Num: Word;
BEGIN
GumpLines := TStringList.Create;
GetGumpfullLines(GetGumpsCount-1,GumpLines);
for i := 0 to GumpLines.Count -1 do
IF GumpLines.Strings = 'ResizePics: X Y ID Width Height Page ElemNum' then
begin
ButtonStringStart := i ;
Break;
end;
for i := ButtonStringStart+1 to GumpLines.Count-1 do
a := Copy(GumpLines.Strings,Pos('0 ResizePic:',GumpLines.Strings)+18,Length(GumpLines.Strings)-1);
Delete(a,Pos('0 ResizePic: ',a),Length(a));
Butt_Num := StrToInt(a);
IF (Butt_Num = 180) then
begin
waitgump('5');
break;
end;
GumpLines.Free;
END.
Re: Вопрос по ResizePic...
Posted: 17.08.2012 17:13
by Vizit0r
1) правильно выдает.
2) зачем надо GetGumpfullLines, если давным-давно есть GetGumpButtonsDescription ?
3) зачем вообще GetGumpfullLines - пробовал GetGumpInfo или нет?
Re: Вопрос по ResizePic...
Posted: 18.08.2012 12:38
by Papr1ka
GetGumpButtonsDescription выдает просто кнопки, а мне нужно выдергивать из ResizePic X и Y и исходя из этого нажимать ту или иную кнопку...С Getgumpinfo не знаком, тяжеловата для меня эта штука...как ни вчитывался, не понимаю:( Вот можно было бы переделать чуток ту програмку мою выше, то я был бы рад:)
Re: Вопрос по ResizePic...
Posted: 19.08.2012 13:33
by Papr1ka
Вроде врубился
If isgump then GetGumpInfo(0,gi);
for i := 0 to GetArrayLength(gi.ResizePics)-1 do
if gi.ResizePics.x = 100 then
begin
waitgump('2');
break;
end;