В следующем билде htmlayout/sciter я добавляю поддержку drag-n-drop "с человеческим лицом".
Базовая идея изложена здесь:
http://terrainformatica.com/forums/topic.php?id=331&page
... << RSDN@Home 1.2.0 alpha rev. 717>>
Здравствуйте, c-smile, Вы писали:
CS>Базовая идея изложена здесь: http://terrainformatica.com/forums/topic.php?id=331&page
Вот один из примеров:
Здравствуйте, c-smile, Вы писали:
Build #3.2.2.7
Подробности
здесь
Примеры в /html_samples/drag-n-drop/
Ага, круто. Ждал эту технику для того что бы ее применить ее немного не по назначению, а именно для перетаскивания самодельных окон внутри документа
оно мне кажется более оптимально будет чем style#left, style#top & parent.update(). Сходу сделать сие не получилось:
1. Когда начинаем перетаскивать draggable object создается ее визуальная копия, видим два объекта. Попробуем первый скрыть так как он становится :active рисуем соответствующий стиль с visible:hidden и видим что так dragging не работает. Ок, можем сделать opacity: 0; — работает, но если нажать на draggable и не шевелить мышей — не видим ничего
2. В Sciter\HLAYOUT дополнительных евентов не замечено
Если сие стоит реализовать в движке, то похоже это будет на:
<html>
<head>
#dialog {
draggable: relocation;
position: absolute;
}
#dialog:move {
opacity: 0.5;
}
#caption {
pointer: move;
}
</head>
<body #main>
<widget#dialog>
<widget #caption>Hello</widget>
<widget #body>Body</widget>
</widget>
</body>
</html>
Суть в том что
style#left, style#top & parent.update происходит только один раз — при drop.
Только одна проблема — перетаскивание работает на любой части диалога, а не только на #caption.
Кто что думает? Помню темки всплывали когда-то...
ПС: Андрей, к слову,
HTMLayoutSDK\html_samples\drag-n-drop\tree-view.htm я сие дело "повесил", доперетаскивался до тех пор пока оно не ушло в нирвану.
Здравствуйте, eudo, Вы писали:
E>Ага, круто. Ждал эту технику для того что бы ее применить ее немного не по назначению, а именно для перетаскивания самодельных окон внутри документа оно мне кажется более оптимально будет чем style#left, style#top & parent.update(). Сходу сделать сие не получилось:
Drag-n-drop как бы не для этого.
"более оптимально будет чем style#left" — если и будет то не на много.
Вот пример такого sub window (в Sciter)
child-windows.htm
<html>
<head>
<style>
form.window
{
prototype: Wnd;
position:absolute;
background:threedface;
border:1px solid threedshadow;
height:100px;
width:100px;
}
form.window > caption
{
width:*;
line-height:1.4em;
padding:4px;
background-color:threedhighlight threedhighlight threedshadow threedshadow;
cursor:move;
}
form.window > body
{
width:*;
height:*;
margin:0 4px 4px 4px;
background-color:window;
}
</style>
<script type="text/tiscript" src="child-windows.tis" />
<head>
<body>
<form.window>
<caption>Caption</caption>
<body>
Window!
</body>
</form>
</body>
</html>
И соотв. behavior в child-windows.tis
type Wnd: Behavior
{
function this()
{
this.xoff = 0;
this.yoff = 0;
this.dragging = false;
}
function onMouse(evt)
{
var cap = this.select("caption");
switch(evt.type)
{
case Event.MOUSE_DOWN:
if( evt.target === cap)
{
this.xoff = evt.x;
this.yoff = evt.y;
this.dragging = true;
cap.capture(true);
return true;
}
break;
case Event.MOUSE_UP:
if(this.dragging)
{
this.dragging = false;
cap.capture(false);
return true;
}
break;
case Event.MOUSE_MOVE:
if( this.dragging )
{
this.refresh();
this.style#left = (evt.xRoot - this.xoff).toString();
this.style#top = (evt.yRoot - this.yoff).toString();
this.update(true);
return true;
}
break;
}
}
}
Надо бы мне добавить поддержку sprite для оптимальной отрисовки. Это да, может помочь в этом случае.
CS>Вот пример такого sub window (в Sciter)
Да, такое использую.
CS>Надо бы мне добавить поддержку sprite для оптимальной отрисовки. Это да, может помочь в этом случае.
Понял, спасибо. Я думал оно на sprites основано