Конференция "Прочее" » Глубины VCL
 
  • Юрий Зотов © (15.06.16 14:33) [20]
    Кстати, тоже интересная задачка - в run-time получить список всех использованных в проекте классов. Желательно, в виде дерева наследования.
  • DayGaykin © (15.06.16 15:40) [21]
    У меня такая задачка:
    Как создать экземпляр класса в стеке?
    (по аналогии с C++).
  • Eraser © (15.06.16 16:06) [22]

    > Юрий Зотов ©   (15.06.16 14:33) [20]

    var
       LContext: TRttiContext;
       LType: TRttiType;
    begin
       { Obtain the RTTI context }
       LContext := TRttiContext.Create;

       { Enumerate all types declared in the application }
       for LType in LContext.GetTypes() do
           OutputDebugString(PChar(LType.Name));

       LContext.Free;

    из справки )
  • NoUser © (15.06.16 18:56) [23]
    > DayGaykin ©   (15.06.16 15:40) [21]

    procedure Test2;
    //const
    // cl = TTest.InstanceSize;
    var
    // a : array [1..cl] of Byte;
    t : TTest;
    begin
    // t := @a;
    t := StackAlloc(TTest.InstanceSize);

    TTest.InitInstance(t);

    end;

    Не? , а StackAlloc можно взять тут http://sourceforge.net/projects/graphics32/files/graphics32/ ))
  • DayGaykin © (15.06.16 20:27) [24]

    > StackAlloc можно взять тут http://sourceforge.net/projects/graphics32/files/graphics32/
    > ))
    >
    >

    А точнее.
    Мне пока не ясно кто будет освобождать стек при выходе из функции.
  • NoUser © (15.06.16 21:13) [25]
    GR32_LowLevel.pas -> StackFree(t);

    зы, там в 64bit asm вроде поправимая, но ошибка.
  • Leonid Troyanovsky © (16.06.16 12:05) [26]

    > Leonid Troyanovsky ©   (15.06.16 10:31) [11]

    > Но, в результате получаю, что на кнопках (TButton, TRadioButton,
    >  TCheckBox) оно не срабатывает.

    На TRadioButton оно работает, а для TButton новую процедуру
    надо делать (по аналогии с TButton.Click) примерно так:

    type
     TClickproc = procedure(ASelf: TObject);

    var
     oldproc: TClickproc;

    procedure TControlClick(ASelf: TObject);
    var
     s: String;
    begin
     oldproc(ASelf);
     s := 'control '+TComponent(ASelf).Name;
     OutputDebugString(PChar(s));
    end;

    procedure TButtonClick(ASelf: TObject);
    var
     Form: TCustomForm;
    begin
     Form := GetParentForm(TControl(ASelf));
     if Form <> nil then Form.ModalResult := TButton(ASelf).ModalResult;
     TControlClick(ASelf);
    end;

    затем

     oldproc := FindDynamicMethod(TControl, -21);
     ReplaceDynamicMethod(TControl, -21, @TControlClick);
     ReplaceDynamicMethod(TButton, -21, @TButtonClick);

    Для TCheckBox делать мне уже влом.

    Для желающих поупражняться могу выложить юнит целиком.

    --
    Regards, LVT.
  • Leonid Troyanovsky © (16.06.16 12:38) [27]

    > Rouse_ ©   (15.06.16 12:43) [13]

    С вертолета, танка - все это неспортивно ;)

    --
    Regards, LVT.
  • Rouse_ © (16.06.16 17:35) [28]

    > Leonid Troyanovsky ©   (16.06.16 12:38) [27]
    > С вертолета, танка - все это неспортивно ;)

    Зависит от задачи :) Иногда муху реально проще убить из пушки :)
 
Конференция "Прочее" » Глубины VCL
Есть новые Нет новых   [118241   +25][b:0][p:0]