Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Вниз

Проблема с свойствами объекта   Найти похожие ветки 

 
Квэнди ©   (2006-06-22 11:15) [0]

Не могу понять в чем праблема.
В desing-time устанавливаю значения свойств а run-time они не загружаются.

Свойство:
//Класс для свойства "Start Button"
type
TMSLMDIPanelPropertyStartButton = class(TPersistent)
private
//Поля свойств
FWidth: integer;
FHeight: integer;
FHorizontalSpace: integer;
FVerticalSpace: integer;
FVisible: boolean;
FGlyph: TBitmap;
FHint: string;
FCaption: TCaption;
FEnabled: boolean;
FDropDownMenu: TPopupMenu;
FFont: TFont;

//Поля событий
FOnChange: TNotifyEvent;

protected
//Методы обработки свойств
procedure SetWidth(Value: integer);
procedure SetHeight(Value: integer);
procedure SetHorizontalSpace(Value: integer);
procedure SetVerticalSpace(Value: integer);
procedure SetVisible(Value: boolean);
procedure SetGlyph(Value: TBitmap);
procedure SetHint(Value: string);
procedure SetCaption(Value: TCaption);
procedure SetEnabled(Value: boolean);
procedure SetDropDownMenu(Value: TPopupMenu);
procedure SetFont(Value: TFont);

//Методы событий
procedure DoFontChangeLink(Sender: TObject);

public
//Систамные методы
constructor Create;
destructor Destroy; override;
procedure Notification(AComponent: TComponent; Operation: TOperation);

published
//Свойства
property Width: integer read FWidth write SetWidth default 50;
property Height: integer read FHeight write SetHeight default 25;
property HorizontalSpace: integer read FHorizontalSpace write SetHorizontalSpace default 5;
property VerticalSpace: integer read FVerticalSpace write SetVerticalSpace default 3;
property Visible: boolean read FVisible write SetVisible default false;
property Glyph: TBitmap read FGlyph write SetGlyph;
property Hint: string read FHint write SetHint;
property Caption: TCaption read FCaption write SetCaption;
property Enabled: boolean read FEnabled write SetEnabled default true;
property DropDownMenu: TPopupMenu read FDropDownMenu write SetDropDownMenu;
property Font: TFont read FFont write SetFont;

//События
property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;

implementation

//Системные методы++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Конструктор класса
constructor TMSLMDIPanelPropertyStartButton.Create;
begin
inherited Create;

FFont:=TFont.Create;
FFont.OnChange:=DoFontChangeLink;
FGlyph:=TBitmap.Create;
FDropDownMenu:=TPopupMenu.Create(nil);

FWidth:=133;
FHeight:=25;
FHorizontalSpace:=5;
FVerticalSpace:=3;
FVisible:=true;
end;

//Деструктор класса
destructor TMSLMDIPanelPropertyStartButton.Destroy;
begin
FFont.Free;
FGlyph.Free;
FDropDownMenu.Free;

inherited;
end;

//Уведомление класса
procedure TMSLMDIPanelPropertyStartButton.Notification(AComponent: TComponent; Operation: TOperation);
begin
if (AComponent = DropDownMenu) and (Operation = opRemove) then DropDownMenu := nil;
end;
//Системные методы--------------------------------------------------------------

//Методы обработки свойств++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Метод записи свойства "Width"
procedure TMSLMDIPanelPropertyStartButton.SetWidth(Value: integer);
begin
if Value<>FWidth then FWidth:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "Height"
procedure TMSLMDIPanelPropertyStartButton.SetHeight(Value: integer);
begin
if Value<>FHeight then FHeight:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "HorizontalSpace"
procedure TMSLMDIPanelPropertyStartButton.SetHorizontalSpace(Value: integer);
begin
if Value<>FHorizontalSpace then FHorizontalSpace:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "VerticalSpace"
procedure TMSLMDIPanelPropertyStartButton.SetVerticalSpace(Value: integer);
begin
if Value<>FVerticalSpace then FVerticalSpace:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "Visible"
procedure TMSLMDIPanelPropertyStartButton.SetVisible(Value: boolean);
begin
if Value<>FVisible then FVisible:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "Glyph"
procedure TMSLMDIPanelPropertyStartButton.SetGlyph(Value: TBitmap);
begin
FGlyph.Assign(Value);
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "Hint"
procedure TMSLMDIPanelPropertyStartButton.SetHint(Value: string);
begin
if Value<>FHint then FHint:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "Caption"
procedure TMSLMDIPanelPropertyStartButton.SetCaption(Value: TCaption);
begin
if Value<>FCaption then FCaption:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "Enabled"
procedure TMSLMDIPanelPropertyStartButton.SetEnabled(Value: boolean);
begin
FEnabled:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "DropDownMenu"
procedure TMSLMDIPanelPropertyStartButton.SetDropDownMenu(Value: TPopupMenu);
begin
FDropDownMenu:=Value;
if Assigned(FOnChange) then OnChange(Self);
end;

//Метод записи свойства "Font"
procedure TMSLMDIPanelPropertyStartButton.SetFont(Value: TFont);
begin
FFont.Assign(Value);
if Assigned(FOnChange) then OnChange(Self);
end;
//Методы обработки свойств------------------------------------------------------

//Внешние методы++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Метод обработки изменения свойства "Font"
procedure TMSLMDIPanelPropertyStartButton.DoFontChangeLink(Sender: TObject);
begin
if Assigned(FOnChange) then OnChange(Self);
end;
//Внешние методы----------------------------------------------------------------

Код обработки свойства в классе котором оно должно стоять

В privat класса описано поле
FStartButton: TMSLMDIPanelPropertyStartButton;

В protected класса описана процедура
procedure SetStartButton(Value: TMSLMDIPanelPropertyStartButton);
procedure DoStartButton(Sender: TObject);

В published класса описано свойство
property SartButton: TMSLMDIPanelPropertyStartButton read FStartButton write SetStartButton;

В конструкторе класса
FStartButton:=TMSLMDIPanelPropertyStartButton.Create;
FStartButton.OnChange:=DoStartButton;

Реализация:

//Метод записи свойства "StartButton"
procedure TMSLMDIPanel.SetStartButton(Value: TMSLMDIPanelPropertyStartButton);
begin
FStartButton.Assign(Value);
end;

//Метод события "StartButton"
procedure TMSLMDIPanel.DoStartButton(Sender: TObject);
begin
with GlavnButton do begin
Width:=FStartButton.Width;
Height:=FStartButton.Height;
Visible:=FStartButton.Visible;
Glyph.Assign(FStartButton.Glyph);
Hint:=FStartButton.Hint;
Caption:=FStartButton.Caption;
Enabled:=FStartButton.Enabled;
Font.Assign(FStartButton.Font);
end;
Invalidate;
end;


Если по умолчанию указать, то при следующей загрузке проекта там становятся "Нули", а если не по умолчанию то при следующей загрузке проекта значения восстанавливаются (и все это происходит в design-time).
А с run-time(ом) получается, что конструктор не влияет на значания полей.

Так что самое интересное с run-time(ом), что сбрасываются только простые типы данных!


 
Desdechado ©   (2006-06-22 12:14) [1]

тебе сюда
http://www.delphimaster.ru/cgi-bin/forum.pl?n=12


 
Квэнди ©   (2006-06-22 12:26) [2]

Извиняюсь, да простят меня модераторы за дублирование тем (


 
Amoeba ©   (2006-06-22 12:45) [3]

А в отладчике что наблюдается?


 
Квэнди ©   (2006-06-23 09:58) [4]

1 Ошибок нет
2 В design-time при повторной загрузке проекта значания типа integer получают 0
3 Соответственно и в run-time такая же история


 
Сергей М. ©   (2006-06-23 10:01) [5]


> Квэнди ©   (23.06.06 09:58) [4]


Для начала унаследуй свой класс от TComponent



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
2-1150379275
XTD
2006-06-15 17:47
2006.07.09
Знает ли кто прог. которая следит за изменениями в регистре?


15-1150178594
Ega23
2006-06-13 10:03
2006.07.09
С Днём рождения! 13 июня


2-1150476240
Handle
2006-06-16 20:44
2006.07.09
CreateToolHelp32SnapShot


15-1149967652
VirEx
2006-06-10 23:27
2006.07.09
J2ME документация на русском, где достать?


3-1147342176
Sergo
2006-05-11 14:09
2006.07.09
Роли в InterBase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский