Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

как перемещать виджет?


Vasya
 Share

Recommended Posts

Есть код, что-то типа такого:

Code:

function Init()

infoLineChild = mainForm:GetChildChecked( "InfoLine", false )

for i = 1, maxLines do

infoList  [ i ]  = mainForm:CreateWidgetByDesc( infoLineChild:GetWidgetDesc() )

end

end

...

function printList()

for i = 1, maxLines do

local widget = infoList  [ i ] 

local id = idList  [ i ] 

if id ~= nil then

widget:Show( true )

widget:SetVal( "value", object.GetName( id ))

-- [[

local fromPlacement = widget:GetPlacementPlain()

local toPlacement = widget:GetPlacementPlain()

fromPlacement.posX = textPosX

fromPlacement.posY = textPosY

toPlacement.posX = textPosX

toPlacement.posY = textPosY + (i - 1) * 40

widget:SetPlacementPlain( toPlacement )

] ]

else

widget:Show ( false )

end

end

end

Если запускать так, как написано, то при выводе нескольких строк текста они, разумеется. накладываются друг на друга. Если раскомментировать SetPlacementPlain, то не показывается вообще ничего, ни одной строки. При этом всяческие placement.posX, posY, GetRealRect, IsVisible и т.д. говорят, что всё хорошо.

Подскажите, пожалуйста, как же их правильно двигать?

Link to comment
Share on other sites

По-моему, всё должно работать, если раскомментировать SetPlacementPlain(). Кроме одной детали :) Ты создаёшь виджеты, и они являются дочерними элементами хз чего (возможно, mainForm, не знаю, не пробовал). А все виджеты позиционируются всегда относительно своего материнского виджета. Т.е. думаю, все твои виджеты реально существуют, НО где-то за пределами панели, на которой они должны были быть. Они, кстати, "обрезаются", если их координаты где-то за пределами размера материнского виджета. Поэтому, их и не видно. В общем, сразу после CreateWidgetByDesc(), нужно объявить каждому виджету, что у него есть мама:

Code:
МатеринскийВиджет:AddChild( infoList [ i ]  )

Эта новость делает виджетов счастливыми :)

Link to comment
Share on other sites

К сожалению, не сработало. Я смотрю в качестве примера на ShowDD - там, как я понял, делается примерно то что мне нужно. Там в xdb файле главной формы описан каждый тип строки по одному разу, а в коде создается список строк, на каждую позицию которого создаются по одному варианту текста. там AddChild нет, но всё равно всё работает.

Link to comment
Share on other sites

Загляни ещё в аддоны Minimap и DarkDPSMeter, они тоже динамично создают виджеты.

Может что не так с изначальными значением fromPlacement после выполнения local toPlacement = widget:GetPlacementPlain() ? Это должна быть структура, заполненная несколькими переменными (там не только posX и posY). Или может, что-то не так с константами textPosX и textPosY ? Их нужно бы скинуть в лог-файл, и посмотреть, что там внутри.

Возможно также, что проблема кроется не в LUA-скрипте, а в XDB-файлах.

Кстати, в аддоне DarkDPSMeter используется библиотека классов, которую написал DarkMaster, может заинтересует, она обсуждается в теме AOClassLibrary.lua - бибилотека классов.

(Ещё, в той теме есть функция LogInfoTable(), скидывающая структуру в лог-файл - пригодится для дебаггинга структуры fromPlacement).

Link to comment
Share on other sites

Сейчас попробовал еще раз - из Init() всё заработало. Из второй функции - не работало. Она вызывалась из обработчика ивента. Странно как-то. Но всё равно, спасибо огромное за подсказки.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use