+ Ответить в теме
Страница 2 из 2
ПерваяПервая 1 2
Показано с 41 по 56 из 56
  1. #1
    Аватар для Няшик Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Живу я здесь
    Сообщений
    1,743
    Поблагодарили 224 раз(а) в 198 сообщениях

    [TResize] Плавное изменение размеров и позиции компонентов

    (update) TResize это не тока полный аналог но ещё и рабочий!

    Серьёзно, попробовал я тем класс попользоваться, и компонент куда - то улетал... Так явно не должно быть.

    У моего класса всего лишь Три функции
    PHP код:
        function Start($obj$v = array(), $speed  15
    $obj
    - (string) Имя компонента \ (object) объект \ (int) идентификатор объекта self
    $v
    - Массив, который может принимать ключи такие как x, y, h, w Так же может и не содержать некоторые.
    - Добавлен параметр f которые отвечает за коллбэк (имя функции) который(ая) будет вызыван(а), когда объект достигнет заданных координат
    - Добавлен параметр s который отвечает за скорость движение объекта

    $speed
    - Скорость

    PHP код:
        function SetInSitu($CallBack
    $CallBack
    - Имя функции, которая будет вызываться глобально, когда объект достигнет заданных координат


    Пример
    Пример коллбэка для SetInSitu
    PHP код:
    TResize::SetInSitu(function($obj) {
        
    prec($obj)->name ' Достиг места' );
    }); 
    PHP код:
    function UnSetBase($obj
    $obj - Имя объекта, для удаления из базы




    Группировка значений в массиве может быть в любом порядке, и содержать 2 - 3 - 4 значения..
    Если значение не заданно например для width то он возьмёт по дефолту оригинальный width


    Скрытый текст:
    Перемещаем объект на 120 пикселей по горизонтали
    PHP код:
        TResize::Start('ComponentName', array('x' => 120)); 
    Перемещаем объект на 60 пикселей по вертикали
    PHP код:
        TResize::Start("ComponentName", array('y' => 60) ); 
    Перемещаем объект на 120 и 60 пикселей по вертикали и горизонтали
    PHP код:
        TResize::Start("ComponentName", array('y' => 60'x' => 120)); 
    Изменяем ширину и высоту
    PHP код:
        TResize::Start("ComponentName", array('h' => 5'w' => 8)); 
    Рандомно размещаем объект по всей форме, с рандомной скоростью
    PHP код:
        $Form c("Form1");
        
    TResize::Start("ComponentName",
            array(
                
    'y' => rand(0$Form->ClientHeight),
                
    'x' => rand(0$Form->ClientWidth),
                
    'f' => function($Obj) {
                    
    prec($Obj)->name ' на месте' );
                },
                
    's' =>  rand(1030)
            )
        ); 



    Сам класс
    Скрытый текст:
    PHP код:
    <?php
        
    # Автор: НЯШИК
        # VER : 0.3
        # Profile: http://community.develstudio.ru/member.php/6675-%D0%9D%D1%8F%D1%88%D0%B8%D0%BA
        # Site :  http://community.develstudio.ru/showthread.php/13619-TResize-%D0%9F%D0%BB%D0%B0%D0%B2%D0%BD%D0%BE%D0%B5-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BE%D0%B2-%D0%B8-%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%B8-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2?p=123971#post123971
        
        
    class resizer // Это просто совместимость resizer by kurandx -> TResize by Няшик
        
    {
            private static 
    $speed 15;
            public static function 
    resize_object($obj$params=array())
            {
                foreach(
    $params as $k => $v) { // совместимость с ключами классов
                    
    if ($k == 'func')
                        
    $k 'f';
                    elseif (
    $k == 'time'// Извините, delay пока не поддерживается
                        
    unset($params[$k]);
                    elseif (
    $k == 'speed')
                        
    $k 's';
                }
                
    TResize::Start($obj$params);
            }
        }
        class 
    TResize {
            private static 
    $TimerTick = array();
            public static 
    $CallBackInSitu null;

            public static function 
    SetInSitu($CallBack) {
                if(
    $CallBack === null or $CallBack == '') {
                    
    self::$CallBackInSitu null;
                } elseif(
    is_callable($CallBacktrue)) {
                    
    self::$CallBackInSitu $CallBack;
                }
            }
            
            public static function 
    UnSetBase($obj) {
                if(
    array_key_exists($name is_object($obj) ? $obj->name $objself::$TimerTick)) {
                    
    gui_destroy(self::$TimerTick[$name][1]);
                    unset(
    self::$TimerTick[$name]);
                }
            }
            
            public static function 
    Start($obj$v = array(), $speed 15) {
                if(
    $obj array_key_exists($name is_object($obj) ? $obj->name $objself::$TimerTick)
                    ? 
    self::$TimerTick[$name][0
                    : (
    is_object($obj)
                        ? (
    self::$TimerTick[$name][0] = $obj->self)
                        : (
    is_string($obj)
                            ? (
    self::$TimerTick[$name][0] = findComponent($obj)->self)
                            : (
    is_numeric($obj)
                                ? (
    self::$TimerTick[$name][0] = $obj)
                                : 
    false)))) {
                    
    $t = &self::$TimerTick[$name];

                    if(!
    $t[3]) {
                        if(!
    array_key_exists(1, (array)$t)) {
                            
    $t[1] = gui_create('TTimer'null);
                            
                       
                            
    event_set($t[1], 'onTimer', function($self) use (&$t) {
                    
                                foreach(
    $t[2] as $i => $prop) {
                                    if(!(
    $t['r'$i] = (round($t[2][$i]) == $p0 call_user_func_array('control_' $i, array($t['obj'], null))))) {
                                        
    call_user_func_array('control_' $i, array($t['obj'], $p0 + (($r = (round($prop) - $p0) / 100 * (int)$t['speed'] ) > ceil($r) : floor($r))));
                                    }
                                }
                            
                                
                                if(
    $t['rw'] and $t['rh'] and $t['ry'] and $t['rx']) {
                                    
    gui_propSet($t[1], 'interval'0);
                                    
    gui_propSet($t[1], 'enable'false);
                                    
    $t[3] = false;
                                
                                    if(
    $t[4] !== null) {
                                        
    call_user_func_array($t[4], array($t['obj']));
                                    } elseif(
    TResize::$CallBackInSitu !== null) {
                                        
    call_user_func_array(TResize::$CallBackInSitu, array($t['obj']));
                                    }
                                }
                            });
                        }
                        
                        
    $t[2] = array('x' => control_x($objnull), 'y' => control_y($objnull), 'h' => control_h($objnull), 'w' => control_w($objnull));
                        
    $t[3] = true;
                        
    $t[4] = null;
                        foreach(
    $v as $i => $v)
                            if((
    $i strtolower(trim($i))) == 'x' or $i == 'y' or $i == 'h' or $i == 'w')
                                
    $t[2][$i] = $v;
                            elseif(
    $i == 'f' and is_callable($vtrue))
                                
    $t[4] = $v;
                            elseif(
    $i == 's')
                                
    $speed $v;
                                
                            
                            
                        
    $t['obj'] = $obj;
                        
    $t['speed'] = &$speed;
                        
    $rw $rh $ry $rx false;
                        
    $t['rw'] = &$rw;
                        
    $t['rh'] = &$rh;
                        
    $t['ry'] = &$ry;
                        
    $t['rx'] = &$rx;

                        
    gui_propSet($t[1], 'interval'1);
                        
    gui_propSet($t[1], 'enable'true);
                    }
                }
                return 
    false;
            }
        }
    ?>
    Последний раз редактировалось Няшик; 06.01.2017 в 17:02. Причина: Оптимизация, улучшение - с учётом того, что предложил zxibit

  2. Пользователь сказал cпасибо:

    zxibit (29.04.2016)

  3. #41
    Аватар для zxibit zxibit На пути к лучшему Дорогой гость
    Сообщений
    1,429
    Поблагодарили 37 раз(а) в 37 сообщениях
    Цитата Сообщение от Няшик Посмотреть сообщение
    Вот
    PHP код:
    global $Mem;

    $ReadActor $Mem->Read(0x0, array(0x00x00x00x0));

    $x $ReadActor 40;
    $y $ReadActor 48;
    $z $ReadActor 44;

    $Postion = array();
    $Postion['x'] = $Mem->Read($x);
    $Postion['y'] = $Mem->Read($y);
    $Postion['z'] = $Mem->Read($z);

    $Mem->unlock(array($x$y$z));

    $Mem->write($x$Postion['x'] + rand(100500));
    $Mem->write($y$Postion['y'] + rand(100500));
    $Mem->write($z$Postion['z'] + rand(100500));

    $Mem->lock(array($x$y$z)); 
    А $Mem задается движком или на создание что-то ставить?
    И зачем блокировать/разблокировывать ячейки?
    Что будет, если не заблокировать?
    Помог? Лучший способ отблагодарить - плюс в репутацию (оставить отзыв положительный) =)
    Для "спасибо" слева есть кнопка "Сказать спасибо" (только после 30-ти сообщений)

  4. #42
    Аватар для Няшик Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Живу я здесь
    Сообщений
    1,743
    Поблагодарили 224 раз(а) в 198 сообщениях
    Цитата Сообщение от zxibit Посмотреть сообщение
    А $Mem задается движком или на создание что-то ставить?
    в скриптах прописано создание класса, по работе с памятью

    Цитата Сообщение от zxibit Посмотреть сообщение
    И зачем блокировать/разблокировывать ячейки?
    Что будет, если не заблокировать?
    Выдаст - ошибка записи в память. Так как там они заморожены. Почитай про VirtualProtectEx

  5. #43
    Аватар для zxibit zxibit На пути к лучшему Дорогой гость
    Сообщений
    1,429
    Поблагодарили 37 раз(а) в 37 сообщениях
    Го обнову!
    Часто требуется переместить только по одной оси, так пускай это станет возможным!
    Если в качестве первого аргумента используется не объект, а integer (свойство то есть объекта), а в качестве второго аргумента - тоже integer, то плавно изменяться будет только свойство.
    Крч на примере покажу:
    TResize::Start( c("Obj")->x, 0 );
    равно
    TResize::Start( c("Obj"), array("x" => 0) );
    Последний раз редактировалось zxibit; 29.05.2016 в 17:59.
    Помог? Лучший способ отблагодарить - плюс в репутацию (оставить отзыв положительный) =)
    Для "спасибо" слева есть кнопка "Сказать спасибо" (только после 30-ти сообщений)

  6. #44
    Аватар для Няшик Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Живу я здесь
    Сообщений
    1,743
    Поблагодарили 224 раз(а) в 198 сообщениях
    Цитата Сообщение от zxibit Посмотреть сообщение
    Го обнову!
    Часто требуется переместить только по одной оси, так пускай это станет возможным!
    Если в качестве первого аргумента используется не объект, а integer (свойство то есть объекта), а в качестве второго аргумента - тоже integer, то плавно изменяться будет только свойство.
    Крч на примере покажу:
    TResize::Start( c("Obj")->x, 0 );
    равно
    TResize::Start( c("Obj"), array("x" => 0) );
    Ну если душа просит
    PHP код:
    function TResize_Start($obj$str) {
        if(
    is_array($str)) return TResize::Start($obj$str);
        
    $args = array();
        if(
    array_walk_recursive(explode(';'$str), function($i$v) use (&$args) {
            
    $i =  explode(':'$i);
            
    $args[trim($i[0])] = trim($i[1]);
        })) 
    TResize::Start($obj$args);

    PHP код:
    TResize_Start(c("Obj"), 'x:30;y:40'); 

  7. #45
    Аватар для zxibit zxibit На пути к лучшему Дорогой гость
    Сообщений
    1,429
    Поблагодарили 37 раз(а) в 37 сообщениях
    Цитата Сообщение от Няшик Посмотреть сообщение
    Ну если душа просит
    PHP код:
    function TResize_Start($obj$str) {
        if(
    is_array($str)) return TResize::Start($obj$str);
        
    $args = array();
        if(
    array_walk_recursive(explode(';'$str), function($i$v) use (&$args) {
            
    $i =  explode(':'$i);
            
    $args[trim($i[0])] = trim($i[1]);
        })) 
    TResize::Start($obj$args);

    PHP код:
    TResize_Start(c("Obj"), 'x:30;y:40'); 
    Хоспаде, не так понял.
    Чтобы в качестве первого аргумента можно было указывать свойство компонента, а во втором - не массив, а новое значение!
    То есть TResize::Start( c("Obj")->x, 10 ); переместит объект на x = 10, не трогая другие свойства.
    Но это добавить в функционал, а не заменить весь функционал на такой.

    П.с. то, что ты дал - ваще не то. И до такого я сам бы додумался ))
    Помог? Лучший способ отблагодарить - плюс в репутацию (оставить отзыв положительный) =)
    Для "спасибо" слева есть кнопка "Сказать спасибо" (только после 30-ти сообщений)

  8. #46
    Аватар для Няшик Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Живу я здесь
    Сообщений
    1,743
    Поблагодарили 224 раз(а) в 198 сообщениях
    Цитата Сообщение от zxibit Посмотреть сообщение
    Хоспаде, не так понял.
    Чтобы в качестве первого аргумента можно было указывать свойство компонента, а во втором - не массив, а новое значение!
    То есть TResize::Start( c("Obj")->x, 10 ); переместит объект на x = 10, не трогая другие свойства.
    Но это добавить в функционал, а не заменить весь функционал на такой.

    П.с. то, что ты дал - ваще не то. И до такого я сам бы додумался ))
    Я хотел тебя насчёт этого раскритиковать. Ты много - хочешь. Хочешь - то, что невозможно. Как ты из свойства узнаешь какому объекту прибавлять это самое свойство ? Ответ - никак. Ну не совсем никак, ты можешь пройтись по всем компонентам, и поискать заранее это свойство - но зачем?? Когда мы можем написать так

    PHP код:
    TResize_Start('ObjName''x:30'); 
    И это уже выигрыш в удобстве.

  9. #47
    Аватар для zxibit zxibit На пути к лучшему Дорогой гость
    Сообщений
    1,429
    Поблагодарили 37 раз(а) в 37 сообщениях
    Цитата Сообщение от Няшик Посмотреть сообщение
    Я хотел тебя насчёт этого раскритиковать. Ты много - хочешь. Хочешь - то, что невозможно. Как ты из свойства узнаешь какому объекту прибавлять это самое свойство ? Ответ - никак. Ну не совсем никак, ты можешь пройтись по всем компонентам, и поискать заранее это свойство - но зачем?? Когда мы можем написать так

    PHP код:
    TResize_Start('ObjName''x:30'); 
    И это уже выигрыш в удобстве.
    а если по ссылке?
    PHP код:
    TResize::Start( &c("Obj")->x10 ); 
    Помог? Лучший способ отблагодарить - плюс в репутацию (оставить отзыв положительный) =)
    Для "спасибо" слева есть кнопка "Сказать спасибо" (только после 30-ти сообщений)

  10. #48
    Аватар для Няшик Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Живу я здесь
    Сообщений
    1,743
    Поблагодарили 224 раз(а) в 198 сообщениях
    Цитата Сообщение от zxibit Посмотреть сообщение
    а если по ссылке?
    PHP код:
    TResize::Start( &c("Obj")->x10 ); 
    Никак - значит никак. У тебя c("Obj")->x вернёт циферки местоположение по вертикали.....

    Вот самый банальный тест твоего провала
    PHP код:
    $x = &$self->x;
    $x += 2300

  11. #49
    Аватар для Няшик Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Живу я здесь
    Сообщений
    1,743
    Поблагодарили 224 раз(а) в 198 сообщениях
    Цитата Сообщение от zxibit Посмотреть сообщение
    а если по ссылке?
    PHP код:
    TResize::Start( &c("Obj")->x10 ); 
    И чем тебя не устроило ?
    PHP код:
    TResize_Start('ObjName''x:30'); 
    Это ведь удобно. Сразу понятно что мы хотим прибавить к свойству "x" - 30 для компонента "ObjName"

    И это гораздо быстрее отработает чем ты постоянно будешь писать вызов функции c

  12. #50
    Аватар для zxibit zxibit На пути к лучшему Дорогой гость
    Сообщений
    1,429
    Поблагодарили 37 раз(а) в 37 сообщениях
    Цитата Сообщение от Няшик Посмотреть сообщение
    И чем тебя не устроило ?
    PHP код:
    TResize_Start('ObjName''x:30'); 
    Это ведь удобно. Сразу понятно что мы хотим прибавить к свойству "x" - 30 для компонента "ObjName"

    И это гораздо быстрее отработает чем ты постоянно будешь писать вызов функции c
    ладно, ладно, переубедил =)
    Помог? Лучший способ отблагодарить - плюс в репутацию (оставить отзыв положительный) =)
    Для "спасибо" слева есть кнопка "Сказать спасибо" (только после 30-ти сообщений)

  13. #51
    Аватар для Mr.Time Mr.Time На пути к лучшему Постоялец
    Сообщений
    768
    Поблагодарили 25 раз(а) в 20 сообщениях
    Почему бы не сделать,
    PHP код:
    class TResize extends __TNoVisual 
    И настроить все свойства, и будет компонент для DS.

  14. #52
    Аватар для zxibit zxibit На пути к лучшему Дорогой гость
    Сообщений
    1,429
    Поблагодарили 37 раз(а) в 37 сообщениях
    Цитата Сообщение от Mr.Time Посмотреть сообщение
    Почему бы не сделать,
    PHP код:
    class TResize extends __TNoVisual 
    И настроить все свойства, и будет компонент для DS.
    а какие ему свойства давать? скорость? и все?
    этот класс должен быть одним в проекте, ни к чему нам 10 ресайзеров.
    а компоненты нужны, когда требуется несколько экземпляров.
    Помог? Лучший способ отблагодарить - плюс в репутацию (оставить отзыв положительный) =)
    Для "спасибо" слева есть кнопка "Сказать спасибо" (только после 30-ти сообщений)

  15. #53
    Аватар для Mr.Time Mr.Time На пути к лучшему Постоялец
    Сообщений
    768
    Поблагодарили 25 раз(а) в 20 сообщениях
    Цитата Сообщение от zxibit Посмотреть сообщение
    а какие ему свойства давать? скорость? и все?
    этот класс должен быть одним в проекте, ни к чему нам 10 ресайзеров.
    а компоненты нужны, когда требуется несколько экземпляров.
    Ой блин,
    PHP код:
    c("resize")->start(...); 
    Зато не надо будет таскать файл.

  16. #54
    Аватар для zxibit zxibit На пути к лучшему Дорогой гость
    Сообщений
    1,429
    Поблагодарили 37 раз(а) в 37 сообщениях
    Цитата Сообщение от Mr.Time Посмотреть сообщение
    Ой блин,
    PHP код:
    c("resize")->start(...); 
    Зато не надо будет таскать файл.
    Но зато ечли кинуть исход тому, у кого нет компонента, программа полетит.
    Помог? Лучший способ отблагодарить - плюс в репутацию (оставить отзыв положительный) =)
    Для "спасибо" слева есть кнопка "Сказать спасибо" (только после 30-ти сообщений)

  17. #55
    Аватар для Няшик Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Няшик Кумир Живу я здесь
    Сообщений
    1,743
    Поблагодарили 224 раз(а) в 198 сообщениях
    Обновление VER : 0.3

    Убран баг с float числом, которое не давала закончить работу движения. (форма\кнопка\.. вставали на пол пути и тряслись)
    Скорость\объект и всё остальное, теперь принадлежат только своей сессии.

  18. Пользователь сказал cпасибо:

    zxibit (08.01.2017)

  19. #56
    Аватар для DimaDark DimaDark Не известно кто Любопытный
    Сообщений
    22
    Поблагодарили 2 раз(а) в 2 сообщениях
    Правда полезная штука, и отличная замена стандартному Resizer от Kurandx.
    11/10
    Здесь был DimaDark..

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения