Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 478

/ вопрос решён /

Здравствуйте!
Как вносить изменения в потомка компонента?
Я делаю так:
- компонент-предок отображается в палитре компонентов (процедура регистрации среде Delphi проведена);
- открываю проект, в котором будет работать потомок (File=>Open Project=>);
- в папке проекта сохраняю копию компонента-предка, открываю его (File=>Open...=>'имя компонента'.pas);
- вношу изменения в открытый компонент;
- компилирую для проверки работоспособности внесенных изменений.
А как вносить изменения правильно (для некоммерческого использования только мной)? Скорость получения ответа не интересует. Вполне удовлетворит в течении нескольких лет.
Например внесены изменения в строки с 147 до 165 :

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

zvygin1964 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: zvygin1964 (статус: Посетитель)
Вопрос отправлен: 17 сентября 2013, 10:17
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 36; последнее сообщение — 12 октября 2013, 22:53; участников в обсуждении: 2.

Страницы: [1] [2] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 17 сентября 2013, 10:33 [#1]:

Цитата (zvygin1964):

Скорость получения ответа не интересует. Вполне удовлетворит в течении нескольких лет.

Подождём до ЧМ по футболу в России! :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 17 сентября 2013, 10:37 [#2]:

Так ты хочешь написать потомка компонента (пронаследоваться и переопределить методы) или просто изменить чужой компонент (тогда просто переименуй его класс)?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 17 сентября 2013, 11:27 [#3]:

Вы уже достаточно меня знаете... Даже и не понимаю Ваше уточнение. Мне нужно рисовать график по данным приходящим из порта. Этот компонент- THeartMachine ваш подарок мне. Большое спасибо! Вот и ломаю его, чтобы приспособить для своих целей.
На сегодня: это понять как он работает.
Сейчас удалил координатную сетку по оси ординат . Оставил только границы максимума и минимума изучаемого параметра.
Что буду делать дальше догадываюсь. Но это в других вопросах.
А регистрировать в палитре компонентов после каждого пробного изменения хлопотно.
До ответа на Ваш вопрос "написать потомка компонента (пронаследоваться и переопределить методы) или просто изменить чужой компонент?" дорасту не скоро. Даже не понимаю о чем речь.
Подожду ЧМ по футболу в России, и перевыборов ВВ, и глобального потепления!
Да, и по поводу пива: какой адрес дали в вопросе #(блин,не нашел свой-же вопрос) туда пиво и отправил... Но там, кажется, была бутылка водки.
zvygin1964

zvygin1964 (статус: Посетитель), 17 сентября 2013, 11:30 [#4]:

Вопрос # 6 459
min@y™

min@y™ (статус: Доктор наук), 17 сентября 2013, 11:51 [#5]:

Цитата (zvygin1964):

А регистрировать в палитре компонентов после каждого пробного изменения хлопотно.

Ясен пень, геморрой.
Когда я, например, пишу компонент, я не устанавливаю его в поллитру. Файл его модуля валяется рядом с проектом программы для его тестирования и создаётся при каждом запуске динамически. Это быстро и просто.

Цитата (zvygin1964):

До ответа на Ваш вопрос "написать потомка компонента (пронаследоваться и переопределить методы) или просто изменить чужой компонент?" дорасту не скоро. Даже не понимаю о чем речь.

Ну у тебя ж книжка есть, там написано всё.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 17 сентября 2013, 12:15 [#6]:

Этот ответ:"Не устанавливаю его в палитру. Файл его модуля валяется рядом с проектом программы для его тестирования и создаётся при каждом запуске динамически",- это похоже, и есть то что я предположил и написал в вопросе. Тогда, вероятно, я делаю правильно.
Как бы убедиться, что понял правильно?
Для меня удобней наливать пиво на номер дебитовой карты Сберегательного банка России. Уточните марку вашего любимого напитка и емкость посуды.
zvygin1964

zvygin1964 (статус: Посетитель), 17 сентября 2013, 12:28 [#7]:

Ого! Оно даже левой кнопкой мыши может! Работает!
zvygin1964

zvygin1964 (статус: Посетитель), 17 сентября 2013, 12:32 [#8]:

Можно изменять состояние вопроса. Даже до вечера не провисел без ответа. Подождать до Нового года?
min@y™

min@y™ (статус: Доктор наук), 17 сентября 2013, 13:32 [#9]:

Цитата (zvygin1964):

это похоже, и есть то что я предположил и написал в вопросе. Тогда, вероятно, я делаю правильно. Как бы убедиться, что понял правильно?

Если ты решил не создавать потомка, а изменить чужой компонент, не меняй его исходник там, откуда он установлен в палитре. Скопируй модуль в папку с проектом и ОБЯЗАТЕЛЬНО внутри модуля переименуй класс компонента (например: THeartMachine ---> TPisecMachine).

Подправить процедуру register придётся вручную.
Советую переименовать модуль в uPisecMachine.pas и прописать его в uses модуля той формы, на которую ты будешь класть компонент.

Теперь компонент нужно создавать динамически на форме и править исходники, как хочется. При каждом запуске можно видеть изменения и отлаживать.

Цитата (zvygin1964):

Для меня удобней наливать пиво на номер дебитовой карты Сберегательного банка России. Уточните марку вашего любимого напитка и емкость посуды.


Номер сим-карты Мегафона подойдёт?
А пиво я люблю Heineken и Tuborg в таре по 5 л.

Цитата (zvygin1964):

Ого! Оно даже левой кнопкой мыши может! Работает!

Да неужели?!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 17 сентября 2013, 14:22 [#10]:

"Номер сим-карты Мегафона подойдёт?",- не уверен. А телефонный номер Мегафона годится.
"Tuborg 5 литров цена",- не нашел. "Heineken 5 литров цена",- давайте нужные цифры, будет исполнено...
Вопрос пока не закрывайте. Еще не проверил...
min@y™

min@y™ (статус: Доктор наук), 17 сентября 2013, 14:41 [#11]:

Цитата (zvygin1964):

А телефонный номер Мегафона годится.
давайте нужные цифры, будет исполнено...

Скинул в личку.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 17 сентября 2013, 16:26 [#12]:

Пиво принято.
Давай вопросы.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 17 сентября 2013, 22:24 [#13]:

С первого раза не получилось. Дайте еще недельку попробовать.
Процедура register вручную исправляется. А " Rename " после переименовки в TPisecMachine превращается обратно в THeartMachine .
А как вы вставляете в ответ скрины экрана? (этот вопрос не требует ответа)
min@y™

min@y™ (статус: Доктор наук), 18 сентября 2013, 08:20 [#14]:

Цитата (zvygin1964):

С первого раза не получилось.

Странно.

Цитата (zvygin1964):

Дайте еще недельку попробовать.

Да хоть месяц.

Цитата (zvygin1964):

А " Rename " после переименовки в TPisecMachine превращается обратно в THeartMachine .

После изменения имени Enter нажимать пробовал?

Цитата (zvygin1964):

А как вы вставляете в ответ скрины экрана?

Заливаю скрин на файло-картинопомойку типа этой, беру оттуда получившийся линк и вставляю сюда как линк на картинку. У тебя тут таких прав нет, почитай правила сайта.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 20 сентября 2013, 21:14 [#15]:

ЗАРАБОТАЛО ПОСЛЕ ТАКИХ ДЕЙСТВИЙ:

- Создал папку с названием TPisecMachine ;
- Скопировал туда архив предка heartmachine полученный в вопросе № 6459 ;
- Распаковал архив и получил семь файлов, и среди них нашел uHeartMachine.pas -это будет нужным предком ;
- запустил Delphi 7;
- File => Open => папка TPisecMachine => uHeartMachine.pas;
- Выделил левой кнопкой мыши TPisecMachine на левой панели (Object TreeView), нажал правую кнопку мыши, из вывалившегося списка выбрал Rename, вставил новое название TPisecMachine, нажал Enter клавиатуры;
- Нашел процедуру procedure Register;

procedure Register;
begin
RegisterComponents('System', [THeartMachine]);
end; // и заменил в ней [THeartMachine] на [TPisecMachine];

- Сохраняю изменения;
- Закрываю среду Delphi 7;
- Открываю папку в которой хранится новый проект в котором стоит этот переделанный компонент,

Сейчас у него старое название uHeartMachine.pas , переименовываю его на uPisecMachine.pas;
- Компонент переделан.

Для использования нового компонента: в проектах использующих новый компонент заменить все упоминания о [THeartMachine] на [TPisecMachine] (в unit).

Спасибо.
zvygin1964

zvygin1964 (статус: Посетитель), 20 сентября 2013, 23:19 [#16]:

Ой, извините, в uses.

Но от этого не легче... Компонент получился, но в исходном проекте с названием HMDemo работать не хочет. После замены в uses uHeartMachine на uPisecMachine,
и в
TForm1 = class(TForm)
Panel1: TPanel;
StatusBar1: TStatusBar;
Panel2: TPanel;
HeartMachine1: TPisecMachine;
Оно (uHeartMachine) возникает само снова!
При компиляции это выглядит табличкой предупреждения:
Х Field Form1.HeartMachine1 should be of type THeartMachine but is declared as TPisecMachine. Correct the declaration?
Настоятельно предлагает Yes. И другие варианты: No , Cancel , Help .

Буду дальше гадать, чего делать...
zvygin1964

zvygin1964 (статус: Посетитель), 21 сентября 2013, 13:32 [#17]:

Вероятно для запуска компонента динамически необходимо установить другой путь в:

procedure Register;
begin
RegisterComponents('System', [TPisecMachine]);
end; // тут заменен [THeartMachine] на [TPisecMachine];

А какой путь должен быть вместо 'System' для динамического запуска компонента uPisecMachine.pas ?
min@y™

min@y™ (статус: Доктор наук), 21 сентября 2013, 19:16 [#18]:

Цитата (zvygin1964):

Компонент получился, но в исходном проекте с названием HMDemo работать не хочет.

Ну правильно. Создай свой проект с нуля, демо не трогай. И создавай компонент на своей форме динамически.

Цитата (zvygin1964):

Вероятно для запуска компонента динамически необходимо установить другой путь в

Нет.

Цитата (zvygin1964):

А какой путь должен быть вместо 'System' для динамического запуска компонента uPisecMachine.pas ?

Это не путь, а имя вкладки на палитре компонентов, в которой должен появиться компонент при его установке в систему. Но, как я писал выше, не надо его устанавливать, надо его изменять и отлаживать без установки, создавая на форме динамически.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 21 сентября 2013, 20:09 [#19]:

То есть, пока устанавливать в систему не буду, в процедуре Register, можно писать чего угодно, например

procedure Register;
begin
RegisterComponents('X', [TPisecMachine]);
end; {'X' изменю когда надо будет установить в систему, но не сегодня.}

Так?

Я не понимаю понятия "создавая на форме динамически", это просто набросить файл uPisecMachine.pas левой кнопкой мыши на новый проект?

Спасибо за "Создай свой проект с нуля, демо не трогай".
Ушел на неделю переделывать демо 1:1 с нуля.
min@y™

min@y™ (статус: Доктор наук), 21 сентября 2013, 20:39 [#20]:

Цитата (zvygin1964):

То есть, пока устанавливать в систему не буду, в процедуре Register, можно писать чего угодно, например

Да можешь вообще эту процедуру закомментарить или удалить: она нужна только для установки компонента в палитру.

Цитата (zvygin1964):

Я не понимаю понятия "создавая на форме динамически", это просто набросить файл uPisecMachine.pas левой кнопкой мыши на новый проект?

Нет. Прочитай раздел "Основные концепции разработки компонентов" в главе 21 части 3. Особенно подраздел "Тестирование компонента". Там пример есть. Вот цитата оттуда:

Цитата:


Несмотря на весь оптимизм и радость, вызванную завершением создания компонента, не спешите добавлять "новоиспеченный" компонент в палитру компонентов, пока он не будет тщательно отлажен. Следует обязательно провести предварительное тестирование, построив проект, в котором создается и используется динамический экземпляр нового компонента. Дело в том, что во время разработки компонент находится в среде IDE. Если в нем содержится ошибка, приводящая к порче памяти, это может, ко всему прочему, привести к зависанию самой среды разработки Delphi.

Цитата (zvygin1964):

Спасибо за "Создай свой проект с нуля, демо не трогай". Ушел на неделю переделывать демо 1:1 с нуля.

Да не за что. :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:48
Выполнено за 0.02 сек.