Сделайте аналогичный код в C++ Builder, пожалуйста(с Delphi)

Livanskiy

unit Unit1;
 
interface
 
uses
Windows, Classes, Controls, Forms, StdCtrls;
 
type
TButton = class(StdCtrls.TButton)
private
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
override;
end;
 
TForm1 = class(TForm)
Button1: TButton;
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TButton }
 
procedure TButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
Hide;
Sleep(1000);
Show;
end;
end;
 
end.
6 ответов

Livanskiy

h-файл
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
 
namespace MyButton
{
    class TButton : public Stdctrls::TButton
    {
    protected:
        DYNAMIC void __fastcall MouseDown(TMouseButton Button, Classes::TShiftState Shift,
                                          int X, int Y)
        {
            if(Button == mbLeft)
            {
                Hide();
                Sleep(1000);
                Show();
            }
        }
    };
};
#define TButton MyButton::TButton
 
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Livanskiy

Я очень плохо понимаю Builder и не понимаю как это должно работать. Можете объяснить, пожалуйста?


Livanskiy

Точно так же, как и в Дельфи. Стандартный класс кнопки подменяется своим, в котором переопределяется один из методов.


Livanskiy


Livanskiy

Конечный результат должен быть: класс-потомок класса TButton, объекты которого при нажатии (щелчке ЛКМ) исчезают на 1 секунду, а потом снова появляются. И с Builder я чувствую себя калекой, ибо не понимаю что жмякать в Form и работать всё будет.


Livanskiy

Еще раз повторить? Так же, как и в Дельфи. Как в Дельфи на форму нужно положить кнопку и она будет исчезать на одну секунду при нажатии, так и в Билдере нужно вышеприведенный namespace вместе с #define-ом добавить перед формой в h-файле, в редакторе форм положить на форму кнопку, и запустить приложение. Кнопка точно так же исчезнет на секунду при клике на ней.