|
Вопрос # 6 478/ вопрос решён / |
|
Здравствуйте!
Как вносить изменения в потомка компонента?
Я делаю так:
- компонент-предок отображается в палитре компонентов (процедура регистрации среде Delphi проведена);
- открываю проект, в котором будет работать потомок (File=>Open Project=>);
- в папке проекта сохраняю копию компонента-предка, открываю его (File=>Open...=>'имя компонента'.pas);
- вношу изменения в открытый компонент;
- компилирую для проверки работоспособности внесенных изменений.
А как вносить изменения правильно (для некоммерческого использования только мной)? Скорость получения ответа не интересует. Вполне удовлетворит в течении нескольких лет.
Например внесены изменения в строки с 147 до 165 :
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: zvygin1964 (статус: Посетитель)
Вопрос отправлен: 17 сентября 2013, 10:17
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 36; последнее сообщение — 12 октября 2013, 22:53; участников в обсуждении: 2.
Страницы: [1] [2] [Следующая »]
|
min@y™ (статус: Доктор наук), 17 сентября 2013, 10:33 [#1]:
Цитата (zvygin1964):
Скорость получения ответа не интересует. Вполне удовлетворит в течении нескольких лет.
Подождём до ЧМ по футболу в России!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 17 сентября 2013, 10:37 [#2]:
Так ты хочешь написать потомка компонента (пронаследоваться и переопределить методы) или просто изменить чужой компонент (тогда просто переименуй его класс)?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
zvygin1964 (статус: Посетитель), 17 сентября 2013, 11:27 [#3]:
Вы уже достаточно меня знаете... Даже и не понимаю Ваше уточнение. Мне нужно рисовать график по данным приходящим из порта. Этот компонент- THeartMachine ваш подарок мне. Большое спасибо! Вот и ломаю его, чтобы приспособить для своих целей.
На сегодня: это понять как он работает.
Сейчас удалил координатную сетку по оси ординат . Оставил только границы максимума и минимума изучаемого параметра.
Что буду делать дальше догадываюсь. Но это в других вопросах.
А регистрировать в палитре компонентов после каждого пробного изменения хлопотно.
До ответа на Ваш вопрос "написать потомка компонента (пронаследоваться и переопределить методы) или просто изменить чужой компонент?" дорасту не скоро. Даже не понимаю о чем речь.
Подожду ЧМ по футболу в России, и перевыборов ВВ, и глобального потепления!
Да, и по поводу пива: какой адрес дали в вопросе #(блин,не нашел свой-же вопрос) туда пиво и отправил... Но там, кажется, была бутылка водки.
|
|
zvygin1964 (статус: Посетитель), 17 сентября 2013, 11:30 [#4]:
Вопрос # 6 459
|
|
min@y™ (статус: Доктор наук), 17 сентября 2013, 11:51 [#5]:
Цитата (zvygin1964):
А регистрировать в палитре компонентов после каждого пробного изменения хлопотно.
Ясен пень, геморрой.
Когда я, например, пишу компонент, я не устанавливаю его в поллитру. Файл его модуля валяется рядом с проектом программы для его тестирования и создаётся при каждом запуске динамически. Это быстро и просто.
Цитата (zvygin1964):
До ответа на Ваш вопрос "написать потомка компонента (пронаследоваться и переопределить методы) или просто изменить чужой компонент?" дорасту не скоро. Даже не понимаю о чем речь.
Ну у тебя ж книжка есть, там написано всё.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
zvygin1964 (статус: Посетитель), 17 сентября 2013, 12:15 [#6]:
Этот ответ:"Не устанавливаю его в палитру. Файл его модуля валяется рядом с проектом программы для его тестирования и создаётся при каждом запуске динамически",- это похоже, и есть то что я предположил и написал в вопросе. Тогда, вероятно, я делаю правильно.
Как бы убедиться, что понял правильно?
Для меня удобней наливать пиво на номер дебитовой карты Сберегательного банка России. Уточните марку вашего любимого напитка и емкость посуды.
|
|
zvygin1964 (статус: Посетитель), 17 сентября 2013, 12:28 [#7]:
Ого! Оно даже левой кнопкой мыши может! Работает!
|
|
zvygin1964 (статус: Посетитель), 17 сентября 2013, 12:32 [#8]:
Можно изменять состояние вопроса. Даже до вечера не провисел без ответа. Подождать до Нового года?
|
|
min@y™ (статус: Доктор наук), 17 сентября 2013, 13:32 [#9]:
Цитата (zvygin1964):
это похоже, и есть то что я предположил и написал в вопросе. Тогда, вероятно, я делаю правильно. Как бы убедиться, что понял правильно?
Если ты решил не создавать потомка, а изменить чужой компонент, не меняй его исходник там, откуда он установлен в палитре. Скопируй модуль в папку с проектом и ОБЯЗАТЕЛЬНО внутри модуля переименуй класс компонента (например: THeartMachine ---> TPisecMachine).

Подправить процедуру register придётся вручную.
Советую переименовать модуль в uPisecMachine.pas и прописать его в uses модуля той формы, на которую ты будешь класть компонент.
Теперь компонент нужно создавать динамически на форме и править исходники, как хочется. При каждом запуске можно видеть изменения и отлаживать.
Цитата (zvygin1964):
Для меня удобней наливать пиво на номер дебитовой карты Сберегательного банка России. Уточните марку вашего любимого напитка и емкость посуды.
Номер сим-карты Мегафона подойдёт?
А пиво я люблю Heineken и Tuborg в таре по 5 л.
Цитата (zvygin1964):
Ого! Оно даже левой кнопкой мыши может! Работает!
Да неужели?!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
zvygin1964 (статус: Посетитель), 17 сентября 2013, 14:22 [#10]:
"Номер сим-карты Мегафона подойдёт?",- не уверен. А телефонный номер Мегафона годится.
"Tuborg 5 литров цена",- не нашел. "Heineken 5 литров цена",- давайте нужные цифры, будет исполнено...
Вопрос пока не закрывайте. Еще не проверил...
|
|
min@y™ (статус: Доктор наук), 17 сентября 2013, 14:41 [#11]:
Цитата (zvygin1964):
А телефонный номер Мегафона годится.
давайте нужные цифры, будет исполнено...
Скинул в личку.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 17 сентября 2013, 16:26 [#12]:
Пиво принято.
Давай вопросы.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
zvygin1964 (статус: Посетитель), 17 сентября 2013, 22:24 [#13]:
С первого раза не получилось. Дайте еще недельку попробовать.
Процедура register вручную исправляется. А " Rename " после переименовки в TPisecMachine превращается обратно в THeartMachine .
А как вы вставляете в ответ скрины экрана? (этот вопрос не требует ответа)
|
|
min@y™ (статус: Доктор наук), 18 сентября 2013, 08:20 [#14]:
Цитата (zvygin1964):
С первого раза не получилось.
Странно.
Цитата (zvygin1964):
Дайте еще недельку попробовать.
Да хоть месяц.
Цитата (zvygin1964):
А " Rename " после переименовки в TPisecMachine превращается обратно в THeartMachine .
После изменения имени Enter нажимать пробовал?
Цитата (zvygin1964):
А как вы вставляете в ответ скрины экрана?
Заливаю скрин на файло-картинопомойку типа этой, беру оттуда получившийся линк и вставляю сюда как линк на картинку. У тебя тут таких прав нет, почитай правила сайта.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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 (статус: Посетитель), 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 (статус: Посетитель), 21 сентября 2013, 13:32 [#17]:
Вероятно для запуска компонента динамически необходимо установить другой путь в:
procedure Register;
begin
RegisterComponents('System', [TPisecMachine]);
end; // тут заменен [THeartMachine] на [TPisecMachine];
А какой путь должен быть вместо 'System' для динамического запуска компонента uPisecMachine.pas ?
|
|
min@y™ (статус: Доктор наук), 21 сентября 2013, 19:16 [#18]:
Цитата (zvygin1964):
Компонент получился, но в исходном проекте с названием HMDemo работать не хочет.
Ну правильно. Создай свой проект с нуля, демо не трогай. И создавай компонент на своей форме динамически.Цитата (zvygin1964):
Вероятно для запуска компонента динамически необходимо установить другой путь в
Нет.
Цитата (zvygin1964):
А какой путь должен быть вместо 'System' для динамического запуска компонента uPisecMachine.pas ?
Это не путь, а имя вкладки на палитре компонентов, в которой должен появиться компонент при его установке в систему. Но, как я писал выше, не надо его устанавливать, надо его изменять и отлаживать без установки, создавая на форме динамически.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
zvygin1964 (статус: Посетитель), 21 сентября 2013, 20:09 [#19]:
То есть, пока устанавливать в систему не буду, в процедуре Register, можно писать чего угодно, например
procedure Register;
begin
RegisterComponents('X', [TPisecMachine]);
end; {'X' изменю когда надо будет установить в систему, но не сегодня.}
Так?
Я не понимаю понятия "создавая на форме динамически", это просто набросить файл uPisecMachine.pas левой кнопкой мыши на новый проект?
Спасибо за "Создай свой проект с нуля, демо не трогай".
Ушел на неделю переделывать демо 1:1 с нуля.
|
|
min@y™ (статус: Доктор наук), 21 сентября 2013, 20:39 [#20]:
Цитата (zvygin1964):
То есть, пока устанавливать в систему не буду, в процедуре Register, можно писать чего угодно, например
Да можешь вообще эту процедуру закомментарить или удалить: она нужна только для установки компонента в палитру.
Цитата (zvygin1964):
Я не понимаю понятия "создавая на форме динамически", это просто набросить файл uPisecMachine.pas левой кнопкой мыши на новый проект?
Нет. Прочитай раздел "Основные концепции разработки компонентов" в главе 21 части 3. Особенно подраздел "Тестирование компонента". Там пример есть. Вот цитата оттуда:
Цитата:
Несмотря на весь оптимизм и радость, вызванную завершением создания компонента, не спешите добавлять "новоиспеченный" компонент в палитру компонентов, пока он не будет тщательно отлажен. Следует обязательно провести предварительное тестирование, построив проект, в котором создается и используется динамический экземпляр нового компонента. Дело в том, что во время разработки компонент находится в среде IDE. Если в нем содержится ошибка, приводящая к порче памяти, это может, ко всему прочему, привести к зависанию самой среды разработки Delphi.
Цитата (zvygin1964):
Спасибо за "Создай свой проект с нуля, демо не трогай". Ушел на неделю переделывать демо 1:1 с нуля.
Да не за что.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|