Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 1
Регистрация: 08.09.2012
Сообщений: 35

Редактор свойства компонента

22.11.2012, 23:14. Показов 2720. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Стоит такая задача: создать компонент с двумя свойствами - множество строк и множество целых чисел. Со строками худо-бедно разобрался, создал свойство типа TStringList, редактор для него из инспектора объектов открывается нормально, а как сделать аналогичное целочисленное свойство с аналогичным редактором(многострочным полем ввода)? Пытался делать собственный редактор свойства, но максимум, что пришло в голову - тот же StringList-editor с контролем ввода, правда, без понятия, как его сделать. Подскажите про создание такого свойства, пожалуйста! И ногами сильно не бейте, компонент впервые делаю, нуб совсем.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.11.2012, 23:14
Ответы с готовыми решениями:

Свойства компонента Edit
Здравствуйте. Пожалуйста подскажите. Я в свойстве Text компонента Edit написал текст например "Введите номер группы" при...

Свойства компонента StringGrid
Скажите пожалуйста, есть ли такое свойство чтобы цифры можно было записать в ячейке в нижнем правом углу или наоборот в верхнем?

Изменение свойства компонента
проблема вот в чем-хочу без вызова обработчика событий сразу выводить на компонент Tpanel caption значение вычислений. Выдает ошибку run...

11
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
22.11.2012, 23:32
Цитата Сообщение от alex.gorbach Посмотреть сообщение
Пытался делать собственный редактор свойства
Среди стандартных наследников TPropertyEditor есть и TStringListProperty и TSetProperty.
0
0 / 0 / 1
Регистрация: 08.09.2012
Сообщений: 35
22.11.2012, 23:40  [ТС]
mss, TSetProperty я видел. Какого типа можно объявить свойство, содержащее массив чисел? Непосредственно свойство-массив публиковать же нельзя, а для непубликуемого свойства редактор бессмысленен...
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
22.11.2012, 23:56
"Массив" и "множество" (неважно чего - целых чисел или строк) - разные по назначению, внутренней организации и использованию программные субъекты.

Что ты собственно хотел ? Чтобы элементы публикуемого тобой свойства-массива обладали главным свойством любого множества - уникальностью принадлежащих ему элементов ? Или что ?
0
0 / 0 / 1
Регистрация: 08.09.2012
Сообщений: 35
23.11.2012, 00:03  [ТС]
Я сказал "множество"? Простите, не то имел в виду. Нужно просто свойство, содержащее несколько целых чисел(массив) с возможностью редактирования из-под инспектора свойств delphi. Объявил свойство типа TStringList -оно автоматически открывается стандартным редактором, нужно что-то подобное для численного свойства.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
23.11.2012, 00:47
Ну унаследуй свой редактор TNumericListProperty от стандартного TStringListProperty и зарегистрируй его.
И в своем наследнике контролируй ввод в соответствии с требуемыми правилами строкового представления чисел.
0
0 / 0 / 1
Регистрация: 08.09.2012
Сообщений: 35
24.11.2012, 02:00  [ТС]
Так, с редакторами вроде разобрался, осталась вот какая проблема: заполняю в design-time мой компонент(наследник TStringGrid), в компоненте на форме все хорошо отображается, но при запуске программы - количество строк остается правильным, но все ячейки пустые. Кода много, вот, например, перерисовка ячеек:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function TMarkTable.SelectCell(ACol, ARow : Longint) : boolean;
begin
  InvalidateGrid;
  result := true;
end;
 
procedure TMarkTable.DrawCell(ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  inherited;
  if gdFocused in State then
  begin
    Canvas.Font.Color := RGB(238,43,67);
    Canvas.Font.Style := [fsBold];
    Canvas.Brush.Color := RGB(223,185,133);
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left, Rect.Top, AnsiUpperCase(Cells[ACol,ARow]));
  end
  else
  if not (gdFixed in State) then
  begin
    Canvas.Font.Color := clBlack;
    Canvas.Font.Style := [];
    Canvas.Brush.Color := clWhite;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left, Rect.Top, AnsiLowerCase(Cells[ACol,ARow]));
  end
end;
Cells заполняю вот так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TMarkTable.SetFio(value : TStringList);
begin
  FFio.Assign(value);
  MoveData;
end;
 
procedure TMarkTable.MoveData();
var
  i : integer;
begin
  RowCount := Max(Fio.Count, Mark.Size) + 1;
  for i:=0 to FFio.Count-1 do
    Cells[0,i+1] := Fio.Strings[i];
  for i:=0 to FMark.Size-1 do
    Cells[1,i+1] := IntToStr(Mark.GetValue(i));
end;
0
0 / 0 / 1
Регистрация: 08.09.2012
Сообщений: 35
27.11.2012, 13:11  [ТС]
Вот. Я понял, в чем дело, но не знаю, как это исправить.
Отладка выявила, что при запуске программы для моего помещенного на форму компонента вызывается еще раз конструктор, а в нем я создавал поля, соответственно, записанная на этапе проектирования в мои поля информация теряется. Как поправить?
Delphi
1
2
3
4
5
6
7
8
9
10
constructor TMarkTable.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  FFio := TStringList.Create;   //здесь поле FFio создается еще раз, теряя записанное при проектировании
  FMark := TArray.Create;
  ColCount := 2;
  RowCount := 2;
  FixedCols := 0;
  FixedRows := 1;
end;
Вот как это выглядит:
- на этапе проектирования

- на этапе работы
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
27.11.2012, 14:51
if csDesigning in ComponentState then
.. этот код выполняется в дизайн-тайм
else
.. этот код выполняется в ран-тайм
0
0 / 0 / 1
Регистрация: 08.09.2012
Сообщений: 35
27.11.2012, 15:05  [ТС]
mss, полезно, не знал такого, только вот подходит ли для моей ситуации? Для моего компонента автоматически(не моим кодом) вызывается конструктор при запуске программы, хотя он уже создан в design-time. Или где он вызывается (чтобы с помощью этого метода ограничить его вызов)?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
27.11.2012, 15:26
Конструктор не может быть не вызван в принципе, иначе объектне будет создан.
В ран-тайм дизайн-тайм-вызов конструктора тебя волновать вообще не должен.
0
0 / 0 / 1
Регистрация: 08.09.2012
Сообщений: 35
27.11.2012, 18:17  [ТС]
mss, так-то оно так, но как тогда сохранить свойства, введенные в дизайнтайме, в компонент, созданный конструктором при запуске в рантайме? Я через редактор свойства заполняю свойство Fio, оно отображается в дизайнтайме, но в конструкторе при запуске программы для этого свойства вызывается Create и оно очищается. Как перенести это свойство в компонент, созданный в рантайме?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2012, 18:17
Помогаю со студенческими работами здесь

Свойства компонента Edit
Как В Edit Сделать так, чтобьі текст писался справа налево.?

Сохранение свойства Checked компонента MainMenu
Доброго времени суток! Помогите с такой проблемой: В общем написал небольшую программку, добавил её в автозагрузку, сделал возможность,...

Изменение свойства Caption компонента Label
Доброго времени суток. Возникла небольшая проблемка. Имеется форма, которая служит и для добавления и для редактирования данных в гриде. На...

Зависимость от значения свойства Directory компонента DirectoryListBox
Вопрос: Использовать для реализации строки состояния компонент TStatusBar Размер первых двух панелей зависит от значения свойства...

Придумать два новых свойства для уже существующего компонента
Здравствуйте , помогите пожалуйста придумать два новых свойства для уже существующего компонента , ничего не лезет в голову


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru