Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
274 / 64 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1

Ссылка на void функцию контрола

29.01.2015, 12:25. Показов 1727. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В проекте использую сторонние компоненты InstrumentLab, это стрелочные и цифровые индикаторы. у компонентов есть поле Value для присваивания значения. Если проделывать процедуру доп: "ILSegmentGauge1->Value = 50" то визуальная часть сразу срабатывает, то есть я вижу что стрелка переместилась, если же менять значение этого поле по указателю "
C++
1
2
double *adr  = &(ILSegmentGauge1->Value);
*adr  = *adr+5.5;
то компонент необходимо обновить функцией ILSegmentGauge1->Refresh();
как получить указатель на эту функцию, и по ссылке её включать?
Миниатюры
Ссылка на void функцию контрола  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.01.2015, 12:25
Ответы с готовыми решениями:

LNK2019: ссылка на неразрешенный внешний символ "void __cdecl run(void)" (?run@@YAXXZ) в функции _wmain
#include "stdafx.h" #include "iostream" #include "cmath" using namespace std; class A { private : double *x; double...

Ошибка: ссылка на неразрешенный внешний символ void
помогите найти причину этой ошибки: #include <windows.h> #include<stdio.h> #include<conio.h> #include<locale.h> ...

System.Void из C# использоваться не может - для получения объекта типа void используйте typeof (void)
Изучаю с# по "Шилдт Г. - C# 4.0 полное руководство" При изучении конструктора возникла проблема: попытался запустить код на стр. 169, а...

4
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
29.01.2015, 12:43
Цитата Сообщение от magals Посмотреть сообщение
если же менять значение этого поле по указателю
Вы уверены, что это поле прям вот так вот открыто объявлено в классе? Что если это не поле, а свойство, и вы таким образом играетесь с чекой от гранаты?

Основной вопрос: зачем вам менять его именно так?
1
274 / 64 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1
29.01.2015, 13:55  [ТС]
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
class PASCALIMPLEMENTATION TILSegmentGauge : public TILBasicSegmentGauge 
{
    typedef TILBasicSegmentGauge inherited;
    
protected:
    Owstdtypes::TOWRealAndRangedSinkPin* FInputPin;
    void __fastcall OnSetValueEvent(Owpins::TOWPin* Sender, double AValue, double AMin, double AMax, bool RangesFilled);
    virtual void __fastcall SetListOwner(Classes::TComponent* AValue);
    
public:
    virtual void __fastcall Loaded(void);
    __fastcall virtual TILSegmentGauge(Classes::TComponent* AOwner);
    __fastcall virtual ~TILSegmentGauge(void);
    
__published:
    __property Owstdtypes::TOWRealAndRangedSinkPin* InputPin = {read=FInputPin, write=FInputPin};
    __property double Value = {read=FValue, write=SetValue};
    __property double Max = {read=FMax, write=SetMax};
    __property double Min = {read=FMin, write=SetMin};
public:
    #pragma option push -w-inl
    /* TWinControl.CreateParented */ inline __fastcall TILSegmentGauge(HWND ParentWindow) : TILBasicSegmentGauge(ParentWindow) { }
    #pragma option pop
    
};
это класс этого компонента. если так понимаю то обращаться можно спокойно.

зачем я это делаю:
У меня на форме присутствуют несколько видов подобных индикаторов. одни отображают в стрелочном формате другие в цифровом. есть функция которая принимает переменную в строковом виде и зависимо от переменой возвращает то чему она ровняется. иногда мне необходимо чтоб та или иная переменная выводилась на индикатор которому я в момент исполнения программы привязываю переменную.

Что хочу создать: Структуру примерно того типа:
C++
1
2
3
4
5
6
struct IndiList{
AnsiString nameIndi; //имя индикатора
AnsiString nameVar; // имя переменой которая привязывается к индикатору 
double *valueIndil;   //указатель на поле Value индикатора
void *fRefresh()       // указатель на функцию Refresh() индикатора 
};
после чего создать массив из этих структур. в момент исполнения программы происходит проход по массиву, выбирается значение nameVar которая передается функцию которая возвращает значение и присваивает значение по указателю valueIndil, после чего включает функцию которая лежит в указателе fRefresh()

работая сразу с указателями я не цепляюсь к определенному классу того или иного индикатора
Миниатюры
Ссылка на void функцию контрола  
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
29.01.2015, 14:21
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Цитата Сообщение от magals Посмотреть сообщение
Что хочу создать: Структуру примерно того типа:
Мне кажется вот эта структура уже родилась в попытках смастерить нечто иное.
Какова вообще вся цель изначальная? Почему нельзя обращаться к компонентам через те места, которые предусмотрены?

Цитата Сообщение от magals Посмотреть сообщение
если так понимаю то обращаться можно спокойно
Неа. В данном случае на чтение прокатит. Конечно. Но вы не задумывались что внутри метода SetValue? Который вы обходите. Он же специально был написан для чего-то. Вот вы жалитесь, что вам приходится Refresh вызывать врукопашную - вот вам и следствие. Но это только то, что вы видите. А чего еще вы не знаете про тот метод? Что там еще не вызывается? Своего вы добьетесь, значение измените, но порушите логику работы класса. Оно того стоит? Вы его используете специально из вредности? Чтобы программа упала в любой момент, а вы б сказали "вот я говорил, что именно этот класс содержит дырку. Разработчики не защитились от пытливых шаловливых рук. Так пусть они теперь страдают от того, что у меня тут все накрылось.".
Ну короче вы поняли.

Разработайте шаблонную функцию и все. Пусть она принимает там ваши разнотипные индикаторы, прям указатель на класс-индикатор. И устанавливаемое значение. А внутри функции уже конкретно выбирайте к кому идет обращение и того класса методы и вызывайте. А не к кускам его памяти обращайтесь.
1
274 / 64 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1
29.01.2015, 14:33  [ТС]
да благодарю что пояснили. для меня магия с указателями только только открывается, вот и предполагал что все можно куда проще устроить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.01.2015, 14:33
Помогаю со студенческими работами здесь

Допустима ли запись вида void method(T *& member)? (ссылка на указатель)
Есть структура struct FamilyMember { int age; std::string name; FamilyMember(int _age, std::string _name): ...

Заменить функцию void на функцию int
#include <iostream> #include <ctime> using namespace std; void f(int *arr, const int N, int a) { int k = 0, v = 0; for (int...

Ссылка на неразрешенный внешний символ _main в функции "int__cdecl invoke_main(void)
KVITANTSIA.h #pragma once #ifndef KVITANTSIA_H #define KVITANTSIA_H #define at all #include <string> using namespace std; ...

Реализовать аналог `void *memmove(void *to, void *from, size_t n)`
Добрый день, подскажите пожалуйста, как реализовать такой метод самостоятельно? который копирует из одного массива в другой n элементов ...

Указатель void в функцию
Уважаемые форумчане подскажите такой вопрос, имеется некая функция на вход надо передать указатель void *pBuf, сама функция ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru