| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |