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

Вниз

Работает в рантайме, но не хочет в дизайнтайме   Найти похожие ветки 

 
TStas ©   (2005-09-03 20:18) [0]

Писал компонент, потомок TGraphicControl"а. В runTime все отлично работает, тестовая программа все свойства и т. д. изменяет и все нормально. Там он создается в OnCreate формы. Стал устанавливать. Установился, при компиляции пакета глюков нет. Кладу на форму - ошибка по адресу 000000000.
Даже мыслей нет, ну что это может быть. :(


 
Турист   (2005-09-03 20:59) [1]

>Даже мыслей нет, ну что это может быть. :(


procedure TForm1.Button1Click(Sender: TObject);
var
 P: procedure;
begin
 @P := nil;
 P
end;


 
Наиль ©   (2005-09-03 22:27) [2]

Поясню высказывание Туриста.
"Ошибка по адресу 000000000" происходит тогда, когда твой компонент пытается вызвать не инициализированое событие. Другими словами твоему событию присвоеное значение nil, а не какая-нибудь процедура.
Достаточно посмотреть на твой список property OnXXX и тебе самому должно стать понятно кто из них виноват.

Как правило, ошибки в дизайнтайме возникаю при задании Парента.

Вот тебе два ориентира, и не забудь рассказать как исправил ошибку.


 
Юрий Зотов ©   (2005-09-04 03:29) [3]

> TStas ©   (03.09.05 20:18)  

> Даже мыслей нет, ну что это может быть.

Аналогично. А чтобы появились хотя бы предположения, нужно для начала посмотреть на объявление класса компонента.


 
TStas ©   (2005-09-04 20:20) [4]

Вот объявление класса без реализации, события могут быть назначены, но не назначались пока
type TShadowOffset = 1..10;

type
 TStRunningString = class(TGraphicControl)
 private
   { Private declarations }
   FX:Integer; //Текущее положение
   Fdx:Integer; //Сдвиг
   FBmp:TBitMap; //Битмап, на котором все и нарисовано
   FText:String; //Сам текст
   FTextWidth:Integer; //Ширина текста
   FDirection:Boolean; //Направление, куда бежит
   FColor:TColor; //Цвет фона
   FTimer:TTimer; //Таймер, который тикает
   FSpeed:Byte;  //Скорость px/s
   FFont:Tfont;
   FOnBeforeTextChange:TOnBeforeTextChange;
   FOnTextChange:TNotifyEvent;
   FOnRun, FOnStop:TNotifyEvent;
   FShadowOffset:TShadowOffset;
   FDropShadow: Boolean;
   FShadowColor:TColor;
   FControlByClick:Boolean;
   FPopupMenu: TPopupMenu;
   FHasPopupMenu: Boolean;

   procedure SetBmp;
   procedure SetColor(Value:Tcolor);
   procedure Move(Sender:TObject);
   procedure SetText(const Value: String);
   procedure SetSpeed(Value: Byte);
   function GetIsRunning: Boolean;
   procedure setIsRunning(const Value: Boolean);
   procedure SetDirection(const Value: Boolean);
   procedure SetFont(const Value: TFont);
   procedure SetDropShadow(const Value: Boolean);
   procedure SetShadowColor(const Value: TColor);
   procedure SetShadowOffset(const Value: TShadowOffset);
   procedure SetLongText(const Value: TStrings);
   procedure SetControlByClick(const Value: Boolean);
   procedure CreateMenu;
   procedure CopyText(Sender:TObject);
   procedure GoBack(Sender:TObject);
   procedure SetHasPopupMenu(const Value: Boolean);
   procedure SetFileOfText(const Value: TFileName);
 protected
   { Protected declarations }
   procedure Resize; Override;
   procedure Click; Override;
 public
   { Public declarations }
   constructor Create(AOwner:TComponent); Override;
   destructor destroy; Override;
   procedure LoadTextFromFile(const Path:String);
 published
   { Published declarations }
   property Text:String read FText write SetText;
   property Speed:Byte read FSpeed write SetSpeed default 30;
   property IsRunning:Boolean read GetIsRunning write SetIsRunning default true;
   property RunToLeft:Boolean read FDirection write SetDirection default true;
   property Color:TColor read FColor write SetColor default clBtnFace;
   property Font:TFont read FFont write SetFont;
   property DropShadow:Boolean read FDropShadow write SetDropShadow;
   property ShadowOffset:TShadowOffset read FShadowOffset write SetShadowOffset default 2;
   property ShadowColor:TColor read FShadowColor write SetShadowColor default clGray;
   property LongText:TStrings write SetLongText;
   property ControlByClick:Boolean read FControlByClick write SetControlByClick default false;
   property HasPopupMenu:Boolean read FHasPopupMenu write SetHasPopupMenu;
   property Align;
   {Публикуемые события}
   {унаследованные}
   property OnClick;
   property OnDblClick;
   property OnMouseDown;
   property OnMouseMove;
   property OnMouseUp;
   {Свои}
   property OnBeforeTextChange:TOnBeforeTextChange read FOnBeforeTextChange write FOnBeforeTextChange;
   property OnTextChange:TNotifyEvent read FOnTextChange write FOnTextChange;
   property OnRun:TNotifyEvent read FOnRun write FOnRun;
   property OnStop:TNotifyEvent read FOnStop write FOnStop;
   property FileOfText:TFileName write SetFileOfText;
 end;

А вот конструктор
constructor TStRunningString.Create(AOwner: TComponent);
begin
 inherited;
FBmp:=TBitmap.Create;
FFont:=TFont.Create;
FBmp.Canvas.Font:=FFont;
Ftext:="Running String";

FDirection:=true;
FColor:=clBtnFace;
FShadowOffset:=2; //Сдвиг тени по умолчанию
FShadowColor:=ClGray; //Цвет тени по умолчанию

ControlByClick:=false; //Задание по умолчанию

Ftimer:=TTimer.Create(self);
Ftimer.Enabled:=false; //Останавливаю пока таймер, чтобы не гюканул
Width:=100;
SetBmp; //Устанавливаю все параметры текста

Ftimer.Interval:=100;
Speed:=30;
FTimer.OnTimer:=Move;
FTimer.Enabled:=true; //И запускаю его
end;

Принцип работы: В SetBmp содается битмап, на который нужным образом выведен нужный текст. По тиканью таймера копируется нужный кусок канвы внутренныего битмапа. Получается, что она бежит попиксельно


 
TStas ©   (2005-09-04 20:25) [5]

>Наиль
С радостью расскажу, если исправлю. А с parent"ом странно. Я его нигде не указывал. Но когда писал Первую бегущую строчку, только дочку метки, там ведь тоже не указывался parent, а не одного глюка не было


 
Турист   (2005-09-04 21:26) [6]

>TStas ©
Ошибка здесь
property LongText:TStrings write SetLongText;
- не определен "метод" чтения published свойства


 
TStas ©   (2005-09-04 21:37) [7]

>Турист
Вот спасибо. Надо вообще это свойство выкинуть


 
TStas ©   (2005-09-04 22:18) [8]

>Турист
Спасибо огромное. Вот что значит специалист настоящий. :)

А как сделать, чтобы на ней, как на любом компонете, писалось ее гордое имя? Ведь в конструкторе его не получишь, там имени еще нет. Может, плохо Фаронова читаю? Надо SetName перекрывать,наверно?


 
Турист   (2005-09-05 21:29) [9]

>TStas ©   (04.09.05 22:18) [8]
Добавить в конструкторе ControlStyle := ControlStyle + [csSetCaption] ?


 
TStas ©   (2005-09-06 19:28) [10]

>Турист
Даже этого делать не пришлось. Замечательно перекрылось СетНайм и бежит с новым именем в Дизайн тайме, что и требовалось.


 
Турист   (2005-09-06 22:43) [11]


procedure TControl.SetName(const Value: TComponentName);
var
 ChangeText: Boolean;
begin
 ChangeText := (csSetCaption in ControlStyle) and
   not (csLoading in ComponentState) and (Name = Text) and
   ((Owner = nil) or not (Owner is TControl) or
   not (csLoading in TControl(Owner).ComponentState));
 inherited SetName(Value);
 if ChangeText then Text := Value;
end;


 
jack128 ©   (2005-09-07 00:55) [12]

TStas ©   (04.09.05 20:20) [4]
property Color:TColor read FColor write SetColor default clBtnFace;
property Font:TFont read FFont write SetFont;
property Text:String read FText write SetText;

Все эти свойства тоже выкинуть, вместо них использовать наследуемые от TControl свойства..


 
TStas ©   (2005-09-07 19:09) [13]

>jack128
Спасибо. Не совсем выкинуть, а опубликовать просто



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

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

Наверх





Память: 0.49 MB
Время: 0.045 c
2-1139595605
13
2006-02-10 21:20
2006.02.26
удалить веделенный текст


15-1139301544
Pazitron_Brain
2006-02-07 11:39
2006.02.26
Развеселите меня


5-1125933078
TStas
2005-09-05 19:11
2006.02.26
НЕ публикация свойства


2-1139747390
Kot_
2006-02-12 15:29
2006.02.26
Работа с датой


15-1139037393
Репортер
2006-02-04 10:16
2006.02.26
Вывод графики и текста





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский