Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584

Области видимости в Builder part2

30.01.2013, 06:41. Показов 3161. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В продолжение темы про Области видимости в Builder
Завела меня в тупичок следующая ситуация:
на отдельном хедере класс,в котором есть две функции: одна создаёт(динамически) диалог(форму на форме пару label,пару edit и кнопка ) а вторая функция собственно обработчик события onclick для кнопки, помимо прочего текста в обработчик кнопки надо засунуть самоуничтожение этого диалога, проблема в том как обращаться из обработчика к объектам в том же классе но в другой функции при этом ещё не созданным? спасибо
на бумаге это выглядит где-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma hdrstop
#include"vcl.h"
#include "dialogs.h"
#pragma package(smart_init)
void ramadialogs::dialogfunc()
{
TForm* ramadialog=new TForm(Form1);
ramadialog->Position=poMainFormCenter;
ramadialog->AutoSize=false;
ramadialog->ClientHeight=120;
ramadialog->ClientWidth=320;
ramadialog->Visible=true;
 //......ляляфа
ok->Height=50;
ok->Caption="готово";
ok->Visible=true;
ok->OnClick=ButtonClick;
}
void __fastcall ramadialogs::ButtonClick(TObject *Sender)
{
 delete ??? //как ему объяснить чего удалять
}
header:
C++
1
2
3
4
5
6
7
8
9
   #include"constructor.h"
#ifndef dialogsH
#define dialogsH
#endif
class ramadialogs
{public:
void dialogfunc();
void __fastcall ButtonClick(TObject *Sender);
};
Добавлено через 6 минут
и ещё немного не по теме может есть какой-то софт отследить утечки памяти?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2013, 06:41
Ответы с готовыми решениями:

Области видимости в Builder
Совсем запутался с областью видимости описываю класс-в том же модуле из обработчика событий кнопки его не видно создаю модуль-из него...

Области видимости
Если я запихиваю любые операции (в данном случае задание и заполнение массива); То далее не видит, не то что не заполненный массив, а...

Области видимости переменных, C#
Темный лес для меня эти области видимости, но разбираться надо, большую часть вроде разобрал, но вот тут зашел в тупик: Имеем форму, в...

37
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
01.02.2013, 02:11
Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
ramadialogs* z=new ramadialogs;
    z->dialogfunc();
}
void __fastcall ramadialogs::ButtonClick(TObject *Sender)
{
delete this;
}
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
01.02.2013, 06:24  [ТС]
отлично но вопрос так и остался не закрытым его только вынесли за пределы класса как теперь из события кнопки удалить z ,побродил по форуму на эту тему есть несколько ответов,одни предлагают зациклить код на значении независимой переменной а кнопкой изменять значение переменной соответственно выводить из цикла (за циклом идёт код удаления) (как по мне глупость редкая программа повесится)
другие варианты ещё "лучше"
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
01.02.2013, 06:40
Цитата Сообщение от ijonhson Посмотреть сообщение
отлично но вопрос так и остался не закрытым его только вынесли за пределы класса как теперь из события кнопки удалить z
А что по вашему делает этот код?
C++
1
2
3
4
void __fastcall ramadialogs::ButtonClick(TObject *Sender)
{
delete this;
}
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
01.02.2013, 06:50  [ТС]
выдаёт ошибку
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
01.02.2013, 06:55
А у меня нормально. Что за ошибка и где?
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
01.02.2013, 07:02  [ТС]
ошибка из исключений прописанных в main могу сказать только это ну и соответственно непосредственно сязана с кодом
C++
1
delete this
неплохо работает если форму удалить собственным методом как-то так:
C++
1
2
3
4
void __fastcall ramadialogs::ButtonClick(TObject *Sender)
{
ramadialog->Close();
}
и подчищает всё кроме объекта класса z
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
01.02.2013, 07:10
По моему вы как то странно все делаете. Каково назначение класса ramadialogs? Просто показать диалог? Вы создаете класс ramadialogs внутри которого кодом создается форма ramadialog. Проще визуально создать вторую форму и вызывать ее. Не нужна форма в классе, достаточно просто второй формы.
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
01.02.2013, 07:24  [ТС]
методом visible?
изначально хотел,в принципе сколько может весить форма а десять? а 86? вроде мелочь
а если всё будет статическое ?,да для программки которую я хотел сделать изначально значение +- 100-200 кб роли не сыграло бы но аппетит приходит во время еды и простенький проект перерос в несовсем простенький
P.S.да и на будущее не мешало бы
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
01.02.2013, 07:33
1. XE нормально отрабатывает delete this, а вот Билдер6 дает ошибку
2. Эти строки пишутся самыми первыми в хидер-файле до ингклудов
C++
1
2
#ifndef dialogsH
#define dialogsH
3. Визуально созданные формы также можно создавать и удалять динамически.
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
01.02.2013, 07:52  [ТС]
спасибо насчёт define и indef в курсе в данном случае не включится в файл в который будет включён данный хедер объявления include но они всё равно в главной форме включены а вообще-то на будущее надо мне конечно быть по аккуратнее

и опять-же если визуальные формы создавать динамически тот же нерешённый вопрос никуда не денется.

Добавлено через 1 минуту
видать в ХЕ исключения немного поумнее прописаны
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
01.02.2013, 07:57
Цитата Сообщение от ijonhson Посмотреть сообщение
и опять-же если визуальные формы создавать динамически тот же нерешённый вопрос никуда не денется.
Денется, вам не придется удалять объект z класса ramadialogs, т.к. не будет класса ramadialogs. Будет только форма ramadialog, которая сама себя легко закроет.
1
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
01.02.2013, 09:10  [ТС]
как вариант спасибо и ещё момент не в курсе в каком файле MessageBox описан так на всякий случай глянуть
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
01.02.2013, 09:37
А хелп слабо посмотреть? Forms.hpp
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.02.2013, 13:23
Цитата Сообщение от ijonhson Посмотреть сообщение
в каком файле MessageBox описан
Пишешь идентификатор(имя функции, к примеру), зажимаешь Ctrl, тыкаешь в него мышкой(не в контрол) - и таким волшебным образом сразу увидишь его объявление. Не помню уже, правда, умеют ли так старые билдеры...
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
01.02.2013, 13:26
Цитата Сообщение от BRcr Посмотреть сообщение
Не помню уже, правда, умеют ли так старые билдеры...
5-й "умеет" по крайней мере...
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
01.02.2013, 13:34
Эта фишка не всегда срабатывает. По MessageBox она перекидывает в winuser.h, а в хелпе (по нажатию F1) написано, что юнит Forms http://docwiki.embarcadero.com... MessageBox
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.02.2013, 13:50
В хелпе написано про метод MessageBox() класса TApplication. Помимо него в глобальной области видимости есть одноименная функция из winapi...
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
06.02.2013, 07:27  [ТС]
Цитата Сообщение от gumi250 Посмотреть сообщение
Денется, вам не придется удалять объект z класса ramadialogs, т.к. не будет класса ramadialogs. Будет только форма ramadialog, которая сама себя легко закроет.
много мне пришлось перечитать но всё таки решил проблему
вот какую конструкцию пришлось сообразить:
при вызове диалога(т.к. модальный)
C++
1
2
3
4
5
6
7
8
9
TForm2 * Form2 = new TForm2(0);
try
{
    Form2->ShowModal();
}
__finally
{
    delete Form2;
}
на кнопке самоудаления
C++
1
this->Close();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.02.2013, 07:27

Области видимости переменных
Когда последняя инструкция в foo присваивает новое значение переменной x, компилятор решает, что это локальная переменная. Следовательно,...

Области видимости функций
Добрый день. Написал класс, помогите найти ошибки #include <iostream> #include <string> #include <vector> using...

Масштабирование области видимости
glm::mat4 g_projMatrix = glm::ortho( x1, x2, y1, y2, z1, z2); А вот если хочу отдалить объект? Самое...

Области видимости переменных
Скорее всего тут все происходит от незнания. Приведу скрипт. var couchbase = require('couchbase'); var cluster = new...

Области видимости объектов
Здравствуйте. Подскажите, пожалуйста, по каким правилам объекты в java видны или соответственно не видны в пределах того или иного метода...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru