Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать кнопку во время выполнения? Создание кнопки программно 
V
    Опции темы
Bizonrelax
  Дата 26.4.2011, 10:05 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.4.2011
Где: Москва

Репутация: нет
Всего: нет



Здравствуйте! Я начинающий программист. Мне неохота читать толстые книжки и справочники, хотя они у меня есть. Я создаю какую-то программу, которая, даже не знаю точно, что будет делать. Экспериментирую...
Я хочу, чтобы создалась кнопка во время выполнения программы.
Я не хочу создавать эту кнопку на этапе проектирования.
Условия такие:
1. Имя кнопки (Name) будет qwqw1
2. Создаваться кнопка будет по событию клика на один из элементов формы (Label1)
вот функция:
Код

void __fastcall TForm1::Label1Click(TObject *Sender)
{
}

Даю сведения о моём компьютере в прикреплённом файле Report3

Вот сведения о среде разработки, которой я пользуюсь:
Borland C++Builder Version 6.0 (Build 10.157)
В опциях проекта сняты флажки Use dynamic RTL, Build with runtime packages
для упрощения переноса построенной программы *.exe на другую ОС Windows (MS, других и нету).

Не предлагайте мне перейти на другую среду разработки. Новые среды разработки работают только на новых ОС, начиная с Windows XP SP3. А я уже на семёрку установил студию 2010, но загружать ради Студии Семёрку неохота. А эта обновилась до SP3 уже потом.

Вот файлы и коды мои, где ничего не работает:
Файл Infinity_CPP.h:
Код

//---------------------------------------------------------------------------

#ifndef Infinity_CPPH
#define Infinity_CPPH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TLabel *Label1;
    void __fastcall FormActivate(TObject *Sender);
    void __fastcall FormKeyPress(TObject *Sender, char &Key);
    void __fastcall FormPaint(TObject *Sender);
    void __fastcall Label1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Файл Infinity_CPP.cpp:
Код

//---------------------------------------------------------------------------

//#ifndef dos

//#include <time.h>
#include <vcl.h>
#pragma hdrstop


#include "Infinity_CPP.h"

//---------------------------------------------------------------------------
//Ìî¸
#include <dos.h>

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
//BorderWidth = 333;
//Close();
SetFocus();
this->WindowState = wsMaximized;
/**
Canvas->Brush->Color = clAqua;
Canvas->Pen->Color = clBlack;
Canvas->Pen->Width = 100;
Canvas->LineTo(200, 300);
**/
struct time t;
gettime(&t);
this->Label1->Caption = t.ti_hund+1;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
//if
if (27 == Key)
this->Close();

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{


Canvas->PenPos = Point(0, 0);
Canvas->Brush->Color = clAqua;
Canvas->Pen->Color = clNavy;
Canvas->Pen->Width = 100;
Canvas->LineTo(200, 300);
//typedef long time_t;

}
//---------------------------------------------------------------------------


//void gettime(struct time *timep);



//---------------------------------------------------------------------------

/**
struct time
{
unsigned char ti_min;
unsigned char ti_hour;
unsigned char ti_hund;
unsigned char ti_sec;

};
**/


//---------------------------------------------------------------------------

//typedef long time_t;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------



void __fastcall TForm1::Label1Click(TObject *Sender)
{
/**
//qwqw1;
TButton *qwqw1 = new TButton(*Form1);
qwqw1->Top = 80;
qwqw1->Left = 300;
qwqw1->Width = 80;
qwqw1->Height = 70;
//qwqw1->Show();

qwqw1->Caption = "Äåòåêòîð êíîïîê";
qwqw1->Font->Color = clBlack;
qwqw1->Enabled = True;
qwqw1->Visible = True;
**/
//TButton *qwqw1 = new TButton(Parent);



}
//---------------------------------------------------------------------------


В моём проекте присутствует только одна форма Form1 и ярлык Label1, которые
я разместил на этапе разработки.

Я прошу, помогите мне правильно написать код в теле функции
void __fastcall TForm1::Label1Click(TObject *Sender)
{
}
Я искал-искал, запросы в Гугуль давал, в Википедии лазил, на разных форумах искал... Ну все умные,
все всё знают, никто вопроса такого не задал ни разу!
И в факах тоже искал, но там очень мало везде.

Это сообщение отредактировал(а) Bizonrelax - 26.4.2011, 12:49

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Report3.txt 977,54 Kb
PM MAIL WWW   Вверх
Usper
Дата 26.4.2011, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Плохо искали.
Пишем в объявлении класса TForm1 в раздел, скажем Public:
Код

...
public:
...
    TButton *MegaButton;
    void __fastcall MegaButtonClick (TObject *Sender); //это у нас обработчик нажатия на кнопку
...

... в обработчик нажатия на метку:
Код

void __fastcall TForm1::Label1Click(TObject *Sender)
{
    MegaButton= new TButton(Sender);
    MegaButton->Parent = Form1;
    MegaButton->Top = 100;
    MegaButton->Left = 100;
    MegaButton->Caption = "Мегабатон";
    MegaButton->OnClick = MegaButtonClick;
    MegaButton->Visible = true;
}

Ну и где-нибудь по ходу нужно написать обработчик нажатия на кнопку:
Код

...
void __fastcall TForm1::MegaButtonClick (TObject *Sender)
{
    ShowMessage("Мегабатон нажат!111!!!11");
}
...



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
xvr
Дата 26.4.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Usper @  26.4.2011,  10:53 Найти цитируемый пост)
    MegaButton= new TButton(Sender);

Точнее так:
Код

MegaButton= new TButton(this);
Все таки владелец кнопки будет форма, а не TLabel на который кликнули  smile 
PM MAIL   Вверх
Bizonrelax
  Дата 26.4.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.4.2011
Где: Москва

Репутация: нет
Всего: нет



Мегабольшое вам спасибо! Я бы никогда не догадался! Я даже не ожидал, что мне так сильно помогут!!! Меня поражает возможность задавать такие сложные вопросы и получать на них такие понятные и всеобъемлющие ответы!!! Я бился над этй задачей два дня! Не мог сообразить, как это всё работает! Когда тыкаешься вслепую, очень бывает долго шишки считать! smile
Книжки, конечно, тоже иногда помогают, но живой человек куда умнее любой книжки (сегодняшней бумажной) и сразу укажет на нужное место, где надо заострить внимание.
На этом ставлю точку. Ответ на мой вопрос был дан, я разобрался в коде, проверил на практике. Тему помечаю, как решённую.
PM MAIL WWW   Вверх
borisbn
Дата 26.4.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(Bizonrelax @  26.4.2011,  10:05 Найти цитируемый пост)
Не предлагайте мне перейти на другую среду разработки. Новые среды разработки работают только на новых ОС, начиная с Windows XP SP3. А я уже на семёрку установил студию 2010, но загружать ради Студии Семёрку неохота. А эта обновилась до SP3 уже потом.


Bizonrelax, просьба - не отвечай мне на следующий вопрос.
Народ, кто-нибудь понял, что сказано в приведённой цитате ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
srt
Дата 26.4.2011, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 13.5.2008

Репутация: нет
Всего: 1



Ein ching Zvi tsyn Firen ziptsih
das bin ihre nihten Schlesser
Sie aus der bi
PM MAIL   Вверх
Ignat
Дата 27.4.2011, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Цитата(borisbn @  26.4.2011,  15:17 Найти цитируемый пост)
Народ, кто-нибудь понял, что сказано в приведённой цитате ? 

Да. У ТС установлено две винды на разных разделах - XP SP3 и 7. Причем первая, на момент установки бормана, была ещё SP2 (или того менее). Под первой осью - упомянутый борман, под второй вс2010. Но разобравшись в вопросах сложной архитектуры вычислительной машины, мы упираемся в вопросы личной мотивации. Очевидно, что семёрку грузить не позволяет страх перед... как бы это сказать... неведомой долбаной фигнёй, а на XP ставить ничего не нужно, ибо там уже живёт Билдер, который был поставлен тогда, когда ничего кроме него установить не получилось.

Вы лучше скажите, кто-нибудь понял следующее?
Цитата(srt @  26.4.2011,  20:33 Найти цитируемый пост)
Ein ching Zvi tsyn Firen ziptsih
das bin ihre nihten Schlesser
Sie aus der bi 


ЗЫ: к модераторам: такая тема пропадает в профразделе. Может в Песочницу её, а?



--------------------
Теперь при чем :P
PM   Вверх
borisbn
Дата 27.4.2011, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(Ignat @  27.4.2011,  07:13 Найти цитируемый пост)
под второй вс2010

студия вроде ж и у билдера есть 2010. не помню то ли RAD, то ли XE...
Цитата(Ignat @  27.4.2011,  07:13 Найти цитируемый пост)
Вы лучше скажите, кто-нибудь понял следующее?

С этим как раз понятно - такой же набор буков, как и у ТС, но только на немецком smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0958 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.