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;