Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 32 из 116<  1 ... 29  30  31  32  33  34  35 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 30.01.2003
Откуда: Москва
Rius И впрямь есть :)



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Rius
Цитата:
Как сделать?

Так и сделать :). У тебя должен быть список обьектов, соответственно каждый обьект будет нормально редактироваться в object Manager. Ничего сложного нет если ты уже писал компоненты


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Ray Adams Список объектов есть в TList. Как записать это дело в Dfm и считать оттуда в такой иерархии?
Код:
    object PanelXP1: TPanelXP
      Left = 32
      Top = 28
      Width = 153
      Height = 125
      HeightMax = 125
      HeightMin = 20
      Slide = True
      Color = clGradientActiveCaption
      TabOrder = 0
      object ButtonImage1: TButtonImage
        Left = 8
        Top = 24
        Width = 137
        Height = 18
        Cursor = crHandPoint
        Caption = 'Button1'
        TabOrder = 0
        Glyph.Data = {...}
        ColorNormal = clNavy
        ColorSelected = clBlue
      end
      object ButtonImage2: TButtonImage
        Left = 8
        Top = 48
        Width = 137
        Height = 18
        Cursor = crHandPoint
        Caption = 'Button2'
        TabOrder = 1
        Glyph.Data = {...}
        ColorNormal = clNavy
        ColorSelected = clBlue
        ButtonFrame = True
      end
    end

Для записи сделал так:
Код:
//---------------------------------------------------------------------------
void __fastcall TPanelXP::DefineProperties(TFiler *Filer)
{
 Inherited::DefineProperties(Filer);
 Filer->DefineProperty("Items",LoadPanelXPItems,StorePanelXPItems,true);
}
//---------------------------------------------------------------------------
void __fastcall TPanelXP::StorePanelXPItems(TWriter *Writer)
{
// ShowMessage("8");
// Writer->WriteBoolean(MyCompProperty);
// Writer->WriteComponent(this->PanelXP->Name);
    for(int i=0; i<FButtonList->Count && i<1; i++)
    {
        TChildButton *cbtn = Items[i];
        if(cbtn->Owner == Writer->Root) Writer->WriteComponent(cbtn);
    }
// ShowMessage("8_");
}

Работает вроде нормально, но на чтении вылетает, т.к. я не знаю даже как его определить для набора компонент
Код:
//---------------------------------------------------------------------------
void __fastcall TPanelXP::LoadPanelXPItems(TReader *Reader)
{
// ShowMessage("7");
// FParentName = Reader->ReadComponent();
// ShowMessage("7_");
    TChildButton *cbtn;// = new TChildButton(this);
    cbtn = (TChildButton *)Reader->ReadComponent(NULL);
    FButtonList->Add(cbtn);
}

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

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, буквально


 

Member
Статус: Не в сети
Регистрация: 17.09.2003
Откуда: UA г.Донецк
Как в Delphi отслеживать сообщения идущие к к форме? Вчастности сообщение о перерисовке?

_________________
Debian Lenny/Sid
при установке линукс не пострадал ни один пингвин, полегли все дятлы


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
_DiseL_
http://delphiworld.by.ru/base/increase_possibility_of_buttons.html
Код:
  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, буквально


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Rius Ну а что мешает присобачить к CollectionItem также и визуальный обьект? Хотя я пока точно не могу сказать, как такое можно будет сделать.


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Ray Adams Я вот тоже не знаю, это и мешает :)
Множественное наследование для VCL запрещено
"Присобачил" вложенный TButton и поставил ему при создании SetSubComponent(true); теперь сохраняется и читается без перепределения DefineProperties и остального.

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Цитата:
Множественное наследование для VCL запрещено

Кем? :)


 

Люди!Помогите плиззз!
Уже 2 месяца вожусь, и никак немоку найти компонент для определения температуры для своих прог!Очень надо!
Может у кого SDK на эту тему есть!
Если кто знает, скинте мне плиз на email : [url]zmenya@inbox.ru[/url]


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Andrey_z
Цитата:
для определения температуры для своих прог

Температуры чего именно?


 

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.

_________________
http://people.overclockers.ru/diler


Последний раз редактировалось Diler 17.04.2005 21:58, всего редактировалось 1 раз.

 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Rius
Код:
class TButtonItem : public TCollectionItem, public TButton

Ну конечно так нельзя! Ты соединяеш визуальный обьект с невизуальным! Твой TCollectionItem должен содержать проле TButton.


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Ray Adams Так вот в результате такого поля у каждого итема есть раскрывающееся дерево редактора компонента button. Видимо все что мне казалось визуальными Item'ами в стандартных компонентах на самом деле только набор информации для их визуализации :(

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


Последний раз редактировалось Rius 18.04.2005 7:44, всего редактировалось 1 раз.

 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Цитата:
Так вот в результате такого поля у каждого итема есть раскрывающееся дерево редактора компонента button.

Так и должно быть, а ты как хотел? Чтобы небыло доступа к настройкам кнопки? Тогда тебе надо самодельные кнопки делать.


 

Member
Статус: Не в сети
Регистрация: 27.10.2003
Откуда: Новокузнецк
Люди, подскажите, как сделать так чтоб стандартное окно формы можно было заменить любой картинкой, какую библиотеку нужно применить, и тоже самое дли кнопочек и бегунка, очень нужно... есть программа, теперь ее нужно раскрасить... какие условия м ограничения при работе с такой библиотекой, типа размер картинке должен быть равен размеру формы или что...?


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Wizard_kuz Особенно прикольно это будет выглядеть при других пользовательских установках оформления интерфейса. Прочитай для начала это: http://www.akzhan.midi.ru/iarchitect/index.htm
Ну а раскрасить можно созданием своих компонент, что и делаю, но в меру.

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

Member
Статус: Не в сети
Регистрация: 27.10.2003
Откуда: Новокузнецк
Rius в универе все настройки одинаковые, так что то не проблемма...
там просто дизайники, интересно конечно, но свой я уже придумал, но как его сделать пока не знаю.. может подскажите конкретно?


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 32 из 116<  1 ... 29  30  31  32  33  34  35 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan