Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Rius
Цитата:
Как сделать?
Так и сделать . У тебя должен быть список обьектов, соответственно каждый обьект будет нормально редактироваться в object Manager. Ничего сложного нет если ты уже писал компоненты
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
А зачем тебе руками сохранять то? Я же сказал, каждый ITem должен быть описан как обьект.
У меня есть компонент TRegValues, он содержит список переменных реестра, так вот каждый Item описан у меня как
TRegValue = class(TCollectionItem)
это все храниться в обьекте
TRegCollection=class(TCollection)
и соответственно все это у основного компонента как
FValues:TRegCollection;
никаких левых потуг для записи и считывания у меня нет, все деолжен делать Delphi/Builder
Добавлено спустя 2 минуты, 8 секунд: Только я что-то не совсем понял что именно ты пытаешся сделать и что именно есть у тебя. Что это за компонент и как он себя ведет?
Member
Статус: Не в сети Регистрация: 11.11.2004 Откуда: Челябинск
Про Collection думал, но ни одного понятного примера не нашел. Надо будет ещё так попробовать. Какие-нибудь члены классов TCollectionItem и TCollection нужно доопределять?
Компонент: панелька как в Windows Explorer слева, "Задачи папок" там и т.п. Для этого сделал отдельные кнопки и отдельно панель, хотел объединить, хотя и так прекрасно работает. Получилось похоже, только пока не следует изменениям стилей и не исчезает с эффектом растворения (просто плавно сворачивается).
Также в прошлом году писал OPC клиент с дочерними тэгами, тогда задачу решил, но криво - у каждого тэга было записано имя родителя. По нему определял к чему приписывать при загрузке, все хранилось на одном верхнем уровне иерархии.
_________________ пишу я программу... и вдруг на клавиатуру выползает bug, буквально
protected { Protected declarations } procedure Paint; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure WndProc(var message : TMessage); override; // Таким способом компонент определяет - находится ли курсор мышки на нём или нет // Если курсор за пределами кнопки, то она всё равно продолжает принимать сообщения мышки. // Так же кнопка будет принимать сообщения, если на родительском окне нет фокуса.
procedure TNewButton.Paint; var ... begin ... end;
// Нажата клавиша мышки на кнопке ? procedure TNewButton.MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); var ffMouseDown, ffMouseOver: Boolean; begin ffMouseDown := True; ffMouseOver := True; if (ffMouseDown <> fMouseDown) or (ffMouseOver <> fMouseOver) then begin fMouseDown := ffMouseDown; fMouseOver := ffMouseOver; Invalidate; // не перерисовываем кнопку без необходимости. end; inherited MouseDown(Button,Shift,X,Y);; end;
// Отпущена клавиша мышки на кнопке ? procedure TNewButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ffMouseDown, ffMouseOver : Boolean; begin ffMouseDown := False; ffMouseOver := True; if (ffMouseDown <> fMouseDown) or (ffMouseOver <> fMouseOver) then begin fMouseDown := ffMouseDown; fMouseOver := ffMouseOver; Invalidate; // не перерисовываем кнопку без необходимости. end; inherited MouseUp(Button,Shift,X,Y); end;
// Эта процедура перехватывает события мышки, если она даже за пределами кнопки // Перехватываем оконные сообщения procedure TNewButton.WndProc(var message : TMessage); var P1,P2 : TPoint; Bo : Boolean; begin if Parent <> nil then begin GetCursorPos(P1); // Получаем координаты курсона на экране P2 := Self.ScreenToClient(P1); // Преобразуем их в координаты относительно кнопки if (P2.X > 0) and (P2.X < Width) and (P2.Y > 0) and (P2.Y < Height) then Bo := True // Курсор мышки в области кнопки else Bo := False; // Курсор мышки за пределами кнопки
if Bo <> fMouseOver then // не перерисовываем кнопку без необходимости. begin fMouseOver := Bo; Invalidate; end; end; inherited WndProc(message); // отправляем сообщение остальным получателям end;
Добавлено спустя 2 часа, 8 минут, 58 секунд: Ray Adams С Collection получилось, но не совсем то. Производные от TCollectionItem есть невизуальные классы. Мне надо чтоб каждый Item был кнопкой, сделал указатель внутри Item'а на кнопку, создаваемую в конструкторе Item'а, и удаляемую в деструкторе. Она естественно сама в dfm не сохраняется, надо опять переопределять DefineProperties.
Можно ли как-нибудь нормально скрестить производный от CollectionItem с производным от TButton, чтобы в инспекторе объектов TButton был item'ом, а не вложенным свойством/компонентом?
_________________ пишу я программу... и вдруг на клавиатуру выползает bug, буквально
Member
Статус: Не в сети Регистрация: 11.11.2004 Откуда: Челябинск
Ray Adams Я вот тоже не знаю, это и мешает Множественное наследование для VCL запрещено
"Присобачил" вложенный TButton и поставил ему при создании SetSubComponent(true); теперь сохраняется и читается без перепределения DefineProperties и остального.
_________________ пишу я программу... и вдруг на клавиатуру выползает bug, буквально
Люди!Помогите плиззз!
Уже 2 месяца вожусь, и никак немоку найти компонент для определения температуры для своих прог!Очень надо!
Может у кого SDK на эту тему есть!
Если кто знает, скинте мне плиз на email : [url]zmenya@inbox.ru[/url]
Member
Статус: Не в сети Регистрация: 11.11.2004 Откуда: Челябинск
Ray Adams class TButtonItem : public TCollectionItem, public TButton
{...
->
E2278 Multiple base classes not supported for VCL classes
Andrey_z Где-то на этом сайте пробегала информация по работе с чипом Winbond, поищи тему "Самодельные сенсоры".
Добавлено спустя 1 час, 36 минут, 21 секунду: Новый вопрос: компонент юзает библиотеку msimg32 (функция GadientFill). После установке на форму проекта линкер ругается на unresolved external (когда-то эта ошибка вводила меня в ступор ), приходится подключать вручную библиотеку.
Как сделать, чтобы при становке компонента на форму msimg32.lib сама подключалась к проекту?
Макрос USELIB почему-то не срабатывает.
_________________ пишу я программу... и вдруг на клавиатуру выползает bug, буквально
Заблокирован Статус: Не в сети Регистрация: 21.11.2003 Откуда: Краснодар
x,y вводимые числа
y0={max(x,y+5) ,if x>y ; min(x+1,y+3), if x<=y}
Почему когда x>y то выполняются оба уловия , т.е находится и max(x,y+5) и min(x+1,y+3), а когда x<=y , то все нормал.? Че не так?
Код:
var X3,y3,min3,max3,yplas : integer;
begin x3:=strtoint(edit35.Text); y3:=strtoint(edit36.Text); {if x>y} if x3>y3 then begin checkbox7.Checked:=true; x3:=strtoint(edit35.Text); yplas:=(y3+5);
if x3>yplas then begin edit37.Text:=inttostr(x3); end; if x3<yplas then begin edit37.Text:=inttostr(yplas); end; end; {if x <= y}
if x<=y then begin checkbox8.Checked:=true; x3:=strtoint(edit35.Text); y3:=strtoint(edit36.Text); min3:=(x3+1); max3:=(y3+3); if max3>min3 then begin edit38.Text:=inttostr(min3); end; if max3<min3 then begin edit38.Text:=inttostr(max3); end; end; end; end.
Member
Статус: Не в сети Регистрация: 11.11.2004 Откуда: Челябинск
Ray Adams Так вот в результате такого поля у каждого итема есть раскрывающееся дерево редактора компонента button. Видимо все что мне казалось визуальными Item'ами в стандартных компонентах на самом деле только набор информации для их визуализации
_________________ пишу я программу... и вдруг на клавиатуру выползает bug, буквально
Последний раз редактировалось Rius 18.04.2005 7:44, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 27.10.2003 Откуда: Новокузнецк
Люди, подскажите, как сделать так чтоб стандартное окно формы можно было заменить любой картинкой, какую библиотеку нужно применить, и тоже самое дли кнопочек и бегунка, очень нужно... есть программа, теперь ее нужно раскрасить... какие условия м ограничения при работе с такой библиотекой, типа размер картинке должен быть равен размеру формы или что...?
Member
Статус: Не в сети Регистрация: 11.11.2004 Откуда: Челябинск
Wizard_kuz Особенно прикольно это будет выглядеть при других пользовательских установках оформления интерфейса. Прочитай для начала это: http://www.akzhan.midi.ru/iarchitect/index.htm Ну а раскрасить можно созданием своих компонент, что и делаю, но в меру.
_________________ пишу я программу... и вдруг на клавиатуру выползает bug, буквально
Member
Статус: Не в сети Регистрация: 27.10.2003 Откуда: Новокузнецк
Rius в универе все настройки одинаковые, так что то не проблемма...
там просто дизайники, интересно конечно, но свой я уже придумал, но как его сделать пока не знаю.. может подскажите конкретно?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения