0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 23
1

OnDblClick на TShape

10.09.2013, 11:10. Показов 2053. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помощи:
Как реализовать OnDblClick на TShape?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2013, 11:10
Ответы с готовыми решениями:

OnClick + OnDblClick
Здравствуйте! Есть панелька, хочу сделать 2 события - OnClick и OnDblClick. желаемого результата...

Неактивный OnDblClick
Добрый вечер,форумчане. Есть вопрос, реально ли сделать событие OnDblClick неактивным?

TTreeView ondblclick
Приветствую, хочу слепить из TTreeView менеджер файлов, подскажите можно ли повесить dblclick на...

Создание onDBLclick
Здравствуйте!Мой вопрос наверное глупый,но я еще очень далек от матерого программиста...мне нужно...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
10.09.2013, 12:05 2
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Не надо ничего реализовывать. У любого TControl-а есть это свойство, только оно protected, поэтому ты не можешь просто так обращаться к нему. Надо открыть доступ:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace MyNamespace // перед классом формы !!!
{
    class TShape : public Extctrls::TShape // Промежуточный класс TShape
    {
    public:
        __property OnDblClick; // Теперь доступ - общий
    };
}
#define TShape MyNamespace::TShape
 
// это класс своей формы
class TForm1 : public TForm
__published:    // IDE-managed Components
    // тут ничего не меняем
 
private: // User declarations
public: // User declarations
    __fastcall TForm1(TComponent* Owner);
    void __fastcall MyDblClick(TObject *Sender); // Вот этот обработчик назначим в Shape1.OnDblClick
};
, и при создании формы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    Shape1->OnDblClick = MyDblClick;
}
 
// Сам обработчик:
void __fastcall TForm1::MyDblClick(TObject *Sender)
{
    ShowMessage("DblClick");
    TShape *shape = dynamic_cast<TShape*>(Sender);
    // Тут можешь производить любые действия с shape...
}
2
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 23
10.09.2013, 12:27  [ТС] 3
дико извиняюсь, но не пойму куда класс впихнуть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//---------------------------------------------------------------------------
 
#ifndef Unit_homeH
#define Unit_homeH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.Menus.hpp>
#include <Vcl.ComCtrls.hpp>
#include <Vcl.Graphics.hpp>
#include "Unit_upak.h"
//---------------------------------------------------------------------------
class Tfrm_home : public TForm
{
__published:    // IDE-managed Components
    TPanel *Panel1;
    TPopupMenu *ppm_home;
    TMenuItem *N1;
    TMenuItem *N2;
    TMenuItem *N3;
    TMenuItem *N4;
    TMenuItem *N5;
    TStatusBar *stb_home;
    TImage *Image1;
    TShape *Shape1;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall N5Click(TObject *Sender);
    void __fastcall N1Click(TObject *Sender);
    void __fastcall FormDblClick(TObject *Sender);
    void __fastcall FormKeyPress(TObject *Sender, System::WideChar &Key);
    void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
    void __fastcall ppm_homePopup(TObject *Sender);
 
private:    // User declarations
public:     // User declarations
    __fastcall Tfrm_home(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE Tfrm_home *frm_home;
//---------------------------------------------------------------------------
#endif
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
10.09.2013, 12:40 4
Не класс, а namespace... Я написал, куда. Перед строкой №16 твоего кода...
2
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 23
10.09.2013, 12:59  [ТС] 5
просто не сразу понял где namespace закрыть скобкой
сделал, вроде работает, но Builder выдаёт предупреждение: [bcc32 Warning] Unit_home.cpp(41): W8004 'shape' is assigned a value that is never used
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
10.09.2013, 13:03 6
Ну, если ты это значение не используешь - просто убери эту строку. А если тебе по OnDblClick-у надо работать с какими-нибудь свойствами/методами объекта, по которому кликнули - то я показал, как до них добраться
1
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 23
10.09.2013, 13:05  [ТС] 7
да я уже и сам увидел , огромное тебе человеческое спасибо!!!
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.09.2013, 16:51 8
Другой вариант через событие MouseDown
C++
1
2
3
4
5
6
7
8
9
10
//---------------------------------------------------------------------------
void __fastcall TForm1::Shape1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
                    int X, int Y)
{
    if( Shift.Contains(ssDouble) && Button== mbLeft)
        {
            ShowMessage("DblClick");
        }
}
//---------------------------------------------------------------------------
2
10.09.2013, 16:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2013, 16:51
Помогаю со студенческими работами здесь

OnDblClick в DBGrid
Имеется форма на которой есть DBGrid с данными. Нужно чтобы при двойном щелчке по строке...

Время задержки между onclick и ondblclick
Ребят, подскажите пожалуйста, как прописать время задержки между onclick и ondblclick. Из памяти...

Как отделить событие OnClick и OnDblClick?
Добрый день. Как разделить событие OnClick и OnDblClick, для SpeedButton? Допустим, если кликнуть...

OnDblClick в DBGrid и открытие новой формы
Здравствуйте! Имеется форма на которой есть DBGrid с данными. Нужно чтобы при двойном щелчке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru