|
Вопрос # 4 500/ вопрос открыт / |
|
Здравствуйте, господа эксперты!
Первая ступень дельфинизма пройдена, пишутся работающие программы, решил взяться за классы, пока облом.
Вот создаю массив строк :
Там много повторяющихся свойст для каждой строки массива. Хотел написать свой класс-наследник, который взял бы все от родителя, и только некоторые свойства конкретизировал, вроде: (См. ниже)
Компайлер ругается матом, и я его понимаю : если членам класса присваивать значения, это уже будет не класс, а объект. Как можно грамотно организовать наследование, которое для меня пока остается фикцией? Книжки листал, и бумажные и в сети, там множество ответов...не на мои вопросы.
И еще одна странность, я уже вроде с этим обращался : к примеру, в Button прописываю свойство Font.Color, компилер спокойно его проглатывает... и игнорирует : фонт всегда остается ченрным. Вот тебе и переопределение, и наследование... Конечно, привыкнуть - и считаешь это как данность, но логики, imho, тут нет, как на взгляд новичка.
Приложение: Переключить в обычный режим- Type
- MasEd = array[0..15] of TEdit ;
-
- .................................
-
-
- for Index:= 0 to 15 do
- begin
- EdMas[Index]:= TEdit.Create(Self);
- EdMas[Index].Parent:= Self;
- EdMas[Index].Top:= 150 + 30 * Index;
- EdMas[Index].Left := 30 ;
- EdMas[Index].Font.Color := $880000 ;
- EdMas[Index].Font.Name := 'Courier New' ;
- EdMas[Index].Font.Size := 16 ;
- EdMas[Index].Font.Style := [fsBold] ;
- EdMas[Index].Width := 740 ;
- EdMas[Index].ReadOnly := False ;
- end ;
-
- ------------------------------
-
-
- TMyEdit = class(TEdit)
- Font.Color = clGreen
-
 |
Вопрос задал: Толяныч (статус: 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 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/
авось кому пригодится.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|