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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 500

/ вопрос открыт /

Здравствуйте, господа эксперты!

Первая ступень дельфинизма пройдена, пишутся работающие программы, решил взяться за классы, пока облом.
Вот создаю массив строк :

Там много повторяющихся свойст для каждой строки массива. Хотел написать свой класс-наследник, который взял бы все от родителя, и только некоторые свойства конкретизировал, вроде: (См. ниже)

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

И еще одна странность, я уже вроде с этим обращался : к примеру, в Button прописываю свойство Font.Color, компилер спокойно его проглатывает... и игнорирует : фонт всегда остается ченрным. Вот тебе и переопределение, и наследование... Конечно, привыкнуть - и считаешь это как данность, но логики, imho, тут нет, как на взгляд новичка.

Приложение:
  1. Type
  2. MasEd = array[0..15] of TEdit ;
  3.  
  4. .................................
  5.  
  6.  
  7. for Index:= 0 to 15 do
  8. begin
  9. EdMas[Index]:= TEdit.Create(Self);
  10. EdMas[Index].Parent:= Self;
  11. EdMas[Index].Top:= 150 + 30 * Index;
  12. EdMas[Index].Left := 30 ;
  13. EdMas[Index].Font.Color := $880000 ;
  14. EdMas[Index].Font.Name := 'Courier New' ;
  15. EdMas[Index].Font.Size := 16 ;
  16. EdMas[Index].Font.Style := [fsBold] ;
  17. EdMas[Index].Width := 740 ;
  18. EdMas[Index].ReadOnly := False ;
  19. end ;
  20.  
  21. ------------------------------
  22.  
  23.  
  24. TMyEdit = class(TEdit)
  25. Font.Color = clGreen
  26.  


Толяныч Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Толяныч (статус: 4-ый класс)
Вопрос отправлен: 12 августа 2010, 11:28
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: DNK

Здравствуйте, Толяныч!
TEdit по-русски называется не строка, а однострочный редактор. Пример правильного наследования:

type
  TMyEdit = class (TEdit)
  public
    constructor Create(AOwner: TComponent); override;
  end;
 
{ TMyEdit }
 
constructor TMyEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
 
  Font.Color := clGreen;
end;

PS. По поводу кнопки: imho, логики в вопросе нет, как на взгляд эксперта.

Ответ отправил: DNK (статус: Студент)
Время отправки: 12 августа 2010, 11:52
Оценка за ответ: 5


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

Всего сообщений: 12; последнее сообщение — 14 августа 2010, 21:59; участников в обсуждении: 4.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 12 августа 2010, 11:37 [#1]:

Цитата (Толяныч):

И еще одна странность, я уже вроде с этим обращался : к примеру, в Button прописываю свойство Font.Color, компилер спокойно его проглатывает... и игнорирует : фонт всегда остается ченрным.

У стандартных компонентов нельзя менять цвета ;-)
min@y™

min@y™ (статус: Доктор наук), 12 августа 2010, 11:41 [#2]:

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

Толяныч (статус: 4-ый класс), 12 августа 2010, 13:11 [#3]:

Что-то от жары сумбурно выражаться стал, но DNK меня понял.
Желание у меня такое: когда бросаю на форму TEdit, оно у меня по умолчанию с нелюбимым мной Arial и к тому же поносного травяного цвета, и каждый раз в инспекторе объектов приходится править ручками. Хотел то ли изменить параметры компонента, вызываемые по умолчанию, то ли сделать наследника класса с уже нужными мне свойствами. Вот уважаемый DNK и предложил мне путь решения, только смутно представляю, в какое место это вставить, но дело решаемое - почитаю примеры и проэкспериментирую.
По поводу цвета текста на кнопках - вопрос, с точки зрения эксперта, лишен смысла. Может, потому, что эксперт свыкся со средой и воспринимает все как данность. Но вот приходит свежий чайник и говорит : хочу, чтобы кнопка Стоп была с большими красного цвета буквами. Большими - это пожалуйста, а насчет цвета - извини. Пиши свой компонент. Нельзя, говорят, изменять цвета. Но в инспекторе объектов я их меняю - а никто на это не реагирует. Это как бы я пришел на выборы, в бюллетне отметил Ж...о, а в результатах все равно П...в. Извините за отступление, но на взгляд крестьянина логики нехватает. Нельзя менять цвет? Так сделайте окошко серым в инспекторе.
Ладно, Борланд это не читает, а прочитал бы, сказал бы : если ты такой умный, напиши свою Дельфию.
Сенки за терпеливое научание.
Вадим К

Вадим К (статус: Академик), 12 августа 2010, 13:21 [#4]:

Обычные кнопки, которые в делфи - это не делфоские кнопки, а виндовские. И они не могут менять цвет.

Цитата (Толяныч):

оно у меня по умолчанию с нелюбимым мной Arial и к тому же [censor] травяного цвета
- видимо винда так настроена.
Почему же в винде нельзя поменять цвет кнопки? а потому, что в винде можно менять цвет кнопок в настройках. И припустим пользователь сделал красные кнопки. А кто то решил сделать красный шрифт для текста кнопок. А о том, что фон может быть другой не догадывается... и будет просто красная кнопка....
Плюс есть такие люди, которых называют дальтоники, а "умный" программист решил сделать красную кнопку на зелёном фоне. Некоторые дальтоники могут и не увидеть.

Так что нужно в первую очередь пинать на себя.
Галочка "подтверждения прочтения" - вселенское зло.
Толяныч

Толяныч (статус: 4-ый класс), 12 августа 2010, 13:24 [#5]:

Еще один маленький вопрос, не смейтесь, пож., над чайником.
Мне зачем понадобился массив TEdit'ов? Я беру блок 256 байт, вывел бы его в 16 строк Мемо ( HEX - представление ), в Memo
отредактировал бы и затем обратно сконвертил в блок. Но я не знаю, как выразить дельфийскими словами такую мысль :
"Взять последние 16 строк из Мемо и с каждой из них сделать следующее : ....". Искал в книгах - увы...
Можно скинуть Мемо в tmp файл и затем считать файл, но это совсем уж через Альпы, чересчур чайниковато даже для меня.
Вадим К

Вадим К (статус: Академик), 12 августа 2010, 13:49 [#6]:

var st:integer;
begin
  if memo1.lines.count < 16
    then st := 0
    else st := Memo1.Lines.Count - 16;
  for i:= st to Memo1.lines.count-1 do begin
    >> memo1.lines[i] << //наша текущая строка.
  end;
end;
Галочка "подтверждения прочтения" - вселенское зло.
Толяныч

Толяныч (статус: 4-ый класс), 12 августа 2010, 13:59 [#7]:

"Как это просто!" (цитата из фильма)
Хорошо, попробую. Thnks.
min@y™

min@y™ (статус: Доктор наук), 13 августа 2010, 08:25 [#8]:

Цитата (Толяныч):

Я беру блок 256 байт, вывел бы его в 16 строк Мемо ( HEX - представление ), в Memo отредактировал бы и затем обратно сконвертил в блок.


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

Толяныч (статус: 4-ый класс), 13 августа 2010, 18:29 [#9]:

>> Есть идея получше - использовать компонент TMPHexEditor.

Посмотрел. Нормально. Но когда сделал уже сам, отказываться от собственного уже жалко. Возьму оттуда панель с ASCII - представлением информации, хотя в принципее вещь достаточно тривиальная.
Толяныч

Толяныч (статус: 4-ый класс), 14 августа 2010, 14:53 [#10]:

С помощью клуба получилось неплохо :
http://photofile.ru/photo/gaev/115752161/large/139058236.jpg

Остался предпоследний вопрос : как редактировать в режиме 'overwrite', а то он все время в 'insert' и на кнопку Insert не реагирует - это возможно?

А последний: компонент для работы с HID-совместимыми устройствами есть в базовом комплекте Delphi-7 или его надо искать и добавлять? Я вроде пробежался по возможным вкладкам, но пока никак.
min@y™

min@y™ (статус: Доктор наук), 14 августа 2010, 15:44 [#11]:

Цитата (Толяныч):

как редактировать в режиме 'overwrite', а то он все время в 'insert' и на кнопку Insert не реагирует - это возможно?

Тот компонент, который порекомендовал я, имеет этот режим. Но ты решил по-своему.

Цитата (Толяныч):

компонент для работы с HID-совместимыми устройствами есть в базовом комплекте Delphi-7 или его надо искать и добавлять?

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

Толяныч (статус: 4-ый класс), 14 августа 2010, 21:59 [#12]:

min@y™: Я не упертый сторонник тезиса "Лучше плохонькое, но свое". Компонетн скачал, вернусь вот из краев Вадима К. :-) - буду изучать. Суть не только в том, чтобы получить новую функцию, но и получить новый навык, что я, видимо, и получу, изучая исходник.

А насчет компонента - нашел источник :
http://sourceforge.net/projects/jvcl/files/
авось кому пригодится.

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

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