• Как вы учились управлять своим временем?

    debose
    @debose
    Для того, чтобы понять чем управлять, надо сначала понять, куда это время уходит.
    Поэтому первое что я начал делать, это вести учет своему времени. Я завёл аккаунт на SlimTimer, завёл там штук 10 типов задач (типа: работа над проектом 1, работа над проектом 2, поболтать с коллегами, потупить в интернете, поиграть в настольный теннис) и в течение рабочего дня при переключении с одной задачи на другую, включал таймер на соответствующий тип задач. Через месяц стала вырисовываться интересная статистика. Еще через пару месяцев я четко увидел, на что у меня уходит большая часть времени.
    После этого, и управлять ничем особо не пришлось. «Плохие» показатели стали уменьшатьтся сами по себе, а «хорошие» — расти.
    Меня хватило где-то на год использования SlimTimer-а.
    Ответ написан
    Комментировать
  • Независимо прицепить несколько обработчиков WindowProc произвольному наследнику TWinControl?

    debose
    @debose
    Я бы сделал так:
    1) В первую очередь проверил, нельзя ли тоже самое реализовать не перекрывая WndProc, например с помощью TAppEvents.OnMessage.
    2) Если нет, то:
    Создал отдельный пакет. В нём сделал бы отдельный компонент, позволяющий организовать цепочку вызовов WinProc. Ну собственно, у вас в коде такой класс уже есть. T***(.UnpatchControl_. Если таких классов много, то имеет смысл сделать у них общего наследника. Или изменить класс T*** так, чтобы PatchControl делегировал вызов экземпляру TMyWndProcQueeHandler (прокси).

    Класс бы выглядел примерно так:
    type
      TMyWndProcQueeHandler = class(TComponent)
      private
        FWndProcsList: array of TWndMethod; // или TList<TWndMethod>
      public
         // здесь присваиваем контролу MyWndProc в качестве WndProc
         // а оригинальный добавлем в FWndProcsList
         procedure PatchControl;
    
         // здесь соответственно восстанавливаем оригинальный WndProc
         procedure UnpatchControl;
    
         // здесь вызываем WndProc-ы в нужном порядке. (начиная с последнего (кастомного) до 0-го (оригинального))
         procedure MyWndProc(var Message: TMessage);
    
         // тут просто добавляем aWndProc в список
         procedure AddWndProc(const aWndProc: TWndProc);
         
         // ну и конечно надо ещё сделать конструктор/деструктор. Опционально переопределить Notification, чтобы получать уведомления от освобожденных связанных компонентов.
        // И добавить property LinkedControl с setter-ом.
    end;
    


    Для каждого WinControl-a в котором нужно что-то переопределять, создавать по экземпляру TMyWndProcQueeHandler.
    Ответ написан
    6 комментариев