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

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

20.01.2013, 02:44. Показов 3983. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Совсем запутался с областью видимости
описываю класс-в том же модуле из обработчика событий кнопки его не видно
создаю модуль-из него не видно форму которая используется в функциях класса(она находится в другом модуле)
ткните пож. пальцем хоть что почитать (книга глава)

Добавлено через 40 минут
даже если я подключаю модуль с формой через include он мне пишет что компонент не является частью формы

Добавлено через 1 час 7 минут
cpp:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
   #include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
#include <Unit1.h>
 
 
//---------------------------------------------------------------------------
 
#pragma package(smart_init)
 
 
 
             void stvorka::stvfun()
             {
                  z=y2/2;
                  xa1=x1+gap;
                  xa2=x2-gap;
                  ya1=y1+gap;
                  ya2=y2-gap;
 
  Form1->Image1->Canvas->Pen->Color=(TColor)RGB(99,212,197);
  Form1->Image1-> Canvas->Pen->Width=1;
  Form1->Image1->Canvas->MoveTo(x1,y1);
  Form1->Image1->Canvas->LineTo(x2,y1);
  Form1->Image1->Canvas->LineTo(x2,y2);
  Form1->Image1->Canvas->LineTo(x1,y2);
  Form1->Image1->Canvas->LineTo(x1,y1);
  Form1->Image1->Canvas->MoveTo(xa1,ya1);
  Form1->Image1->Canvas->LineTo(xa2,ya1);
  Form1->Image1->Canvas->LineTo(xa2,ya2);
  Form1->Image1->Canvas->LineTo(xa1,ya2);
  Form1->Image1->Canvas->LineTo(xa1,ya1);
  Form1->Image1->Canvas->MoveTo(x1,y1);
  Form1->Image1->Canvas->LineTo(xa1,ya1);
  Form1->Image1->Canvas->MoveTo(x2,y1);
  Form1->Image1->Canvas->LineTo(xa2,ya1);
  Form1->Image1->Canvas->MoveTo(x2,y2);
  Form1->Image1->Canvas->LineTo(xa2,ya2);
  Form1->Image1->Canvas->MoveTo(x1,y2);
  Form1->Image1->Canvas->LineTo(xa1,ya2);
   if (leftrigth==0){
  Form1->Image1->Canvas->MoveTo(xa2,ya1);
  Form1->Image1->Canvas->LineTo(xa1,z);
  Form1->Image1->Canvas->LineTo(xa2,ya2);
}
 if (leftrigth==1){
  Form1->Image1->Canvas->MoveTo(xa1,ya1);
  Form1->Image1->Canvas->LineTo(xa2,z);
  Form1->Image1->Canvas->LineTo(xa1,ya2);
}
 
                  }
 
      void rama::ramafun()
      {
                  xa1=x1+gap;
                  xa2=x2-gap;
                  ya1=y1+gap;
                  ya2=y2-gap;
       Image1->Canvas->Pen->Color=(TColor)RGB(99,212,197);
       Form1->Image1-> Canvas->Pen->Width=1;
       Form1->Image1->Canvas->Rectangle(x1,y1,x2,y2);
       Form1->Image1->Canvas->Rectangle(xa1,ya1,xa2,ya2);
       Form1->Image1->Canvas->MoveTo(x1,y1);
       Form1->Image1->Canvas->LineTo(xa1,ya1);
       Form1->Image1->Canvas->MoveTo(x2,y1);
       Form1->Image1->Canvas->LineTo(xa2,ya1);
       Form1->Image1->Canvas->MoveTo(x2,y2);
       Form1->Image1->Canvas->LineTo(xa2,ya2);
       Form1->Image1->Canvas->MoveTo(x1,y2);
       Form1->Image1->Canvas->LineTo(xa1,ya2);
 
      }
.h
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
//---------------------------------------------------------------------------
 
#ifndef Unit2H
#define Unit2H
class stvorka
 {
 private:
              int xa1,xa2,ya1,ya2,z;
      public:
             int x1,x2,y1,y2,leftrigth,gap;
             public:
             void stvfun();
             };
             class rama
      {
      private:
      int xa1,xa2,ya1,ya2;
      public:
      int x1,x2,y1,y2,gap;
      public:
          void ramafun();
      };
//---------------------------------------------------------------------------
#endif
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2013, 02:44
Ответы с готовыми решениями:

Области видимости в Builder part2
В продолжение темы про https://www.cyberforum.ru/cpp-builder/thread766700.html Завела меня в тупичок следующая ситуация: на отдельном...

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

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

27
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.01.2013, 04:20
Это пожалуй лучше выyести в h-файл
C++
1
#include "Unit1.h"
62 строку заменить на
Form1->Image1->Canvas->Pen->Color=(TColor)RGB(99,212,197);
А вообще как по мне, так идеология не верна. Form1 в stvorka нужно передавать как параметр или как свойство, даже стоит передавать не весь Form1, а только канву, ведь створке не нужна вся форма, ему достаточно только канвы.
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
20.01.2013, 06:57  [ТС]
спасибо но появилась новая ошибка после переноса в .h #include:[C++ Error] Unit1.cpp(1): Unable to invoke Code Completion due to errors in source code что-то у меня такое подозрение что ему сама функция не нравится хотя в unit1 работала нормально или всё таки её как-то по-молдавански надо запихивать в обработчик событий?

Добавлено через 15 минут
опять же если не обращаться к функциям класса проект собирается без сбоев
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.01.2013, 08:54
кстати еще эту строку надо убрать она лишняя
C++
1
#include <Unit1.h>
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
20.01.2013, 09:52  [ТС]
убрал не помогает
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.01.2013, 10:33
весь код бы глянуть, весь проект можете выложить?
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
20.01.2013, 11:17  [ТС]
вот или лучше код выложить и каких файлов?
Вложения
Тип файла: rar архив.rar (2.7 Кб, 12 просмотров)
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
20.01.2013, 12:33
Посмотрите что вы выложили. Это пустой проект.
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
21.01.2013, 06:56  [ТС]
извиняюсь.
спасибо создал заново проект переписал всё по новой работает где то какой-то мусор был

Добавлено через 7 часов 9 минут
ещё моментик почему у этой конструкции значение всегда false(условие if)
C++
1
((shir1&&vis1>400)&&(shir1&&vis1<6400))
если мне необходимо задать диапазон значений в условии я обязательно должен использовать два if ?
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
21.01.2013, 07:07
C++
1
2
3
if(shir1&&vis1>400&&vis1<6400)
{//...
}
Смотри что приходит в shir1 и vis1
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
21.01.2013, 07:43  [ТС]
спасибо уже разобрался невнимательность

Добавлено через 4 минуты
детские ошибки, вчера полночи искал ошибку (вместо фигурной } стояла)) шрифт мелкий почти не видно разницы

Добавлено через 1 минуту
осталось только класс импост(самый сложный) описать и конструктор готов а дальше проще
0
21.01.2013, 11:23

Не по теме:

интересно, что мешает изменить размер шрифта...

0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
21.01.2013, 21:13  [ТС]
шрифт не проблема тока монитор 19" и всего 1 штука
ещё один вопросик не по теме :
возникла необходимость использовать компонент с именем записанным в переменной допустима ли такая конструкция:
Form1->переменная->Left=250;
если нет то как грамотно это сделать?
и как свойству name (AnsiString) присвоить значение Char (для конвертации строки в int и double есть функции) а как быть с char

Добавлено через 23 минуты
Цитата Сообщение от ijonhson Посмотреть сообщение
возникла необходимость использовать компонент с именем записанным в переменной допустима ли такая конструкция:
Form1->переменная->Left=250;
Цитата Сообщение от ijonhson Посмотреть сообщение
Form1->переменная->Left=250;
речь идёт о динамически созданном компоненте
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.01.2013, 23:41
- если речь идет о чем-нибудь типа
C++
1
TButton *newbtn =  new TButton(Form1);
то да, ну и дальше
C++
1
newbtn->Left=250;
-
C++
1
2
AnsiString str = "lalafafa";
char *lafa = str.c_str();
- правила: один вопрос - одна тема (на будущее), в этой теме вам удалось, потому что вопросы какие-то мелкие уж очень, будет желание развить - пожалуйте в новую тему. я предупредил .
1
21.01.2013, 23:46

Не по теме:

Я не угрожаю, я предупреждаю.© :D

2
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
22.01.2013, 03:41  [ТС]
наверно я неправильно сформулировал вопрос.
У меня на форме есть несколько Image остальные будут создаваться динамически в зависимости от действий пользователя
у каждого Image в обработчике событий one click код записывающий в глобальную переменную AnsiString activeimage;
имя этого Image.
При нажатии на кнопку функция (класса которая обрабатывает один из Image) должна обращаться к image с именем записанным в переменной AnsiString activeimage; то-есть к активному Image и менять его свойства,канву и т.д.
к примеру пользователь кликнул на Image3 обработчик событий записал в AnsiString activeimage; Image3 далее пользователь нажимает на кнопку вызывающюю функцию обрабатывющюю изображение.
то есть как изменить свойства компонента на Form1->имя которого находится в activeimage->Canvas->Pen->Color=(TColor)RGB(99,212,197);
...........

Добавлено через 2 минуты
в смысле насчёт чего?
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
22.01.2013, 04:29
Так много лучше, это и быстрее и красивее
C++
1
2
TImage* activeimage;
activeimage->Canvas->Pen->Color=(TColor)RGB(99,212,197);
Глобальные переменные нужно использовать только в самом крайнем случае. Программа должна состоят из самодостаточных модулей.
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
22.01.2013, 06:47  [ТС]
вы абсолютно правы передать указатель в качестве свойства класса или параметра функции намного удобнее и конечно же можно обойтись без лишних переменных вот только голова у меня болит за другое придётся по просьбе модератора вынести это в оттдельную тему "Создать указатель на случайно выбранный объект"
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
22.01.2013, 10:18
Вот делов-то! В объявлении класса формы объявляешь указатель на TImage, потом где надо присваиваешь ему адрес интересующего экземпляра класса, потом по нему обращаешься к объекту. Только не забудь обнулять указатель, когда он не нужен или объект, на который он указывал, разрушен, а при обращении по нему делать проверку на NULL.
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
26.01.2013, 09:00  [ТС]
ещё один вопрос по области видимости
есть глобальная переменная meter -счётчик созданных объектов но тут:
C++
1
2
3
4
5
 void __fastcall TForm1::AMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    Form1->Label7->Caption=meter;
}
её значение всегда неизменно даже после того как meter==220 при вызове обработчика mousedown на label выводится 1
такое впечатление что код в обработчике события исполняется только один раз при запуске программы как его перехитрить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2013, 09:00
Помогаю со студенческими работами здесь

Изменение области видимости функции
Здравствуйте, имеется вопрос по наследованию: Пусть имеется некоторый класс A c функцией func class A { ... Public: int...

Инициализация вне области видимости
Здравствуйте! Работаю над деревом, в котором есть две структуры: struct file { public: string name; //имя string...

Классы, наследование, области видимости
A.h: #ifndef A_H #define A_H #include &quot;C.h&quot; class C; class A { private:

Оператор разрешения области видимости
Только начинаю изучать ООП. Объясните где и как применяется оператор разрешения области видимости.

Какие есть области видимости в C++?
Добрый день. Что влияет на видимость идентификаторов в коде? Пока мне удалось найти информацию о видимости: членов класса:...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru