159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
1

Компонент пользователя и его свойства при размещении его на форме

08.02.2012, 00:59. Показов 1433. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть пользовательский компонент на базе TImage. При размещении его на форме проекта, компонент отрисовывается в соотвествии со своими параметрами по умолчанию, при явном задании размеров Hight или Width в object inspector компонент корректно изменяет свои параметры и корректно отрисовывается в соответствии с новыми размерами, но вот стоит его потянуть за уголок мышкой для изменения этих же Hight или Width и компонент якобы занимает новый размер, но вот параметры Hight и Width при этом не изменяются в object inspector и компонент не отрисовывается в соответствии с новыми размерами.

Как сделать чтобы компонент, на этапе редактирования формы корректно отрисовывался не только явным изменением Hight или Width в object inspector , но и растягиванием его мышью на форме ?

Чего нужно обрабатывать ? ( хотелось бы пример )

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2012, 00:59
Ответы с готовыми решениями:

Дочерний компонент не обновляется при изменении его свойства
Родитель .Строка 121 и 245 import * as React from "react"; import User from "./User"; import...

Получить доступ к элементу объекта document по его ID и изменить свойства элемента и его содержимое
Здравствуйте господа, нужен скрипт который будет выводить все свойства объекта, допустим <div>...

Ввести число. По выбору пользователя добавить в него его четверть, найти его квадратный корень или остаток от деления на 4
Ввести число. По выбору пользователя добавить в него его четверть, найти его квадратный корень или...

Создание события в классе при изменении свойства одного из его полей
Ребят, в общем я недавно начал работать на формах и там есть события (events). Вопрос: можно-ли в...

8
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
08.02.2012, 13:39 2
Вообще-то при создании компонента от TImage, при изменении его размеров мышкой, все должно быть нормально и размер меняется и его значения.

Возможно вы решили взять под контроль данные свойства и тут либо надо доводить дело до конца, либо довериться разработчикам TImage (а конкретнее TWinControl). Крайне рекомендую второе, удалите все дополнительные объявления/переобъявления/присвоения и т.п. связанные с параметрами размеров компонента.

Так же если у вас используется обработка событий через Dispatch. То для многих событий лучше прописывать обращение к родительской обработке:
C++
1
TWinControl::Dispatch(Message); // TImage::Dispatch(Message);
0
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
08.02.2012, 16:22  [ТС] 3
Не используется обработка событий через Dispatch.

Вопрос в другом:

1)Как отследить ( через какое событие ) изменение размеров компонента на форме, на этапе редактирования формы, а не на этапе выполнения программы ? (Нет у TImage события OnResize и т.п. )

2) Или ввести и определить событие - изменение размеров компонента с соответствующим обработчиком на этапе редактирования формы на которой размещён компонент ?

3) Как определить/назначить что созданное мной событие с названием OnResize будет срабатывать именно тогда когда происходит изменение размеров компонента ?
0
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
10.02.2012, 14:19  [ТС] 4
TImage - наследник класса TControl.
У TControl есть событие OnResize, но в TImage это событие уже не published, потому что это событие -OnResize не доступно в Object Inspector

Если я создаю наследника MyImageClass на базе TImage я уже не смогу переобъявить событие OnResize из TControl как public или published ?
0
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
13.02.2012, 16:59  [ТС] 5
Если кому-нибудь любопытно, то делается это так:

(пример)
KPerformanceGraph.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class PACKAGE KPerformanceGraph : public TImage
{
//создаём новое событие
private:
TNotifyEvent FOnResized;
 
// объявляем новые функции для отрисовки того что нам нужно Они заменяют родные
// от TImage
protected:
void __fastcall SetHeight(int AHeight);
void __fastcall SetWidth (int AWidth);
 
public:
// функция которая будет вызываться для обработки события изменения размера 
// компонента - OnResize
void __fastcall Resized(System::TObject* Sender);
}
KPerformanceGraph.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
// Конструктор нового компонента на базе TImage
__fastcall KPerformanceGraph::KPerformanceGraph(TComponent* Owner)
        : TImage(Owner)
{
// создаём обработчик события OnResize в новом компоненте KPerformanceGraph
// на базе TImage событие OnResize отсутствует в TImage, но оно объявлено 
// как protected в родителе TImage - TControl. Соответственно мы может использовать его в 
// наследниках TImage, что с успехом и организуем
FOnResized = &(Resized);
this->OnResize = FOnResized;
}
 
// обработчик события при изменении компонента будет отрисовывать компонент не только во 
// время исполнения программы, но и на этапе // создания - редактирования вами формы
void __fastcall KPerformanceGraph::Resized(System::TObject* Sender){ 
if (ComponentState.Contains(csDesigning)){
SetHeight(((TControl *)this)->Height);
SetWidth(((TControl *)this)->Width);
}
}
 
void __fastcall KPerformanceGraph::SetHeight(int AHeight){
//...код отрисовки того что вам нужно при изменении высоты
}
 
void __fastcall KPerformanceGraph::SetWidth(int AWidth){
//...код отрисовки того что вам нужно при изменении ширины
}
0
8 / 8 / 0
Регистрация: 14.10.2011
Сообщений: 118
13.02.2012, 17:29 6
Анельзя просто AutoSize поставить
0
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
13.02.2012, 17:32  [ТС] 7
Я не пробовал.

Попробуйте. Расскажите потом, пожалуйста, что получилось.
.
.
.

попробовал:
На этапе редактирования тогда не будет отрисовывать, если компонент мышкой увеличить.
0
8 / 8 / 0
Регистрация: 14.10.2011
Сообщений: 118
13.02.2012, 19:56 8
А что вы вобще написать хотите, какую прогу
0
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
13.02.2012, 21:28  [ТС] 9
Просто написал свой маленький компонент. Стало любопытно сделать так, чтобы компонент вёл себя при создании формы так же как оригинальные.
0
13.02.2012, 21:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2012, 21:28
Помогаю со студенческими работами здесь

Как при изменении свойства Enabled у Checkbox не менять цвет его текста?
При изменении свойства Enabled у Checkbox цвет меняется на черный. Как запретить его менять? В...

Как в родителе выполнить условие при изменении свойства родителя его потомком?
Вроде всё просто, но всё плохо ))) примерный!!! код abstract class A { protected $a; ...

Проверка существования пользователя при его авторизации
В БД есть поле логин , соответственное запрос должен проверять есть ли такая запись в БД , если...

Visual Studio падает при размещении контролов на форме в режиме проектирования
Всем привет. Имеется VS 2008 express, когда я создаю форму и кидаю на нее визуальные элементы к...

При создании нового пользователя не создается его директория
2. В системе у меня при создании нового пользователя не создается его директория. Как это исправить?

Вычисление суммы компонент файла и поиск наименьших его компонент
Создайте файл f, компоненты которого являются действительными числами. Напишите программу...


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

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

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