Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];
ВнизКак правильно подключить обьект или в чем ошибка?... Найти похожие ветки
← →
Andrewtitoff © (2008-03-20 10:37) [0]Здравствуйте!, нагублил я тут вроде как полезную вещь для обработки ошибок под названием TgsCatcher
(http://www.codenet.ru/progr/delphi/stat/errors.php)
использовал этот вариант:
(http://www.delphikingdom.com/asp/answer.asp?IDAnswer=58915)
Тока ничего немогу понять Создал я в своей проге новый юнит, засунул туда все это дело, все замечательно откомпилировалось, после чего его вроде как и написано в статье подключил т.е. описал обьект "ааа" класса TgsCatcher после чего установил его св-во enabled в true, как и написанно в статье, вот только после этого появилась ошибка "Access violation at address 0048C7A1 in module Project_Lift.exe"....
выделяет эту строку:
procedure TgsCatcher.SetEnabled(const Value: boolean);
begin
FEnabled := Value;
^^^^^^^^^^^^^^^^^^
end;
Что не так я делаю?, подскажите пожалуйста!...
unit Unit_FormMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, AccessXP, OleServer, StdCtrls, Buttons, ExtCtrls, ImgList,
Printers, Unit_My,Unit_New,Unit_VViezda,Unit_Form_PPEdit,Unit_VPuska,Unit_Password, mmsystem, Menus, Unit2,gsCatcher;
type
TFormMain = class(TForm)
Exit: TBitBtn;
...
procedure FormCreate(Sender: TObject);
...
private
public
{ Public declarations }
end;
var
FormMain : TFormMain;
...
aaa : TgsCatcher;
implementation
uses Unit_FormShow, Unit_New_menu, Unit_Message, Unit_FormEditSP,
Unit_FormSkPEdit, Unit_FormDemo;
{$R *.dfm}
procedure TFormMain.FormCreate(Sender: TObject);
begin
aaa.Enabled:=true;
...
end;
← →
tesseract © (2008-03-20 10:38) [1]А кто объект создавать будет ?
← →
Andrewtitoff © (2008-03-20 10:49) [2]Ааа.., ну да, а что там в скобках то писать надо, чего то непойму?... =((((
aaa.Create(AOwner : TComponent);
← →
Kolan © (2008-03-20 10:51) [3]> AOwner : TComponent);
Владельца пиши, подробности в справке есть.
← →
Andrewtitoff © (2008-03-20 11:10) [4]Эх.., если бы у меня с английским еще нормально было.... =((((
← →
Ega23 © (2008-03-20 11:13) [5]
> Эх.., если бы у меня с английским еще нормально было.... =((((
Если бы у бабушки... Ну, ты в курсе.
Не можешь читать справку - бери лопату в руки и иди подметать улицу, программирование не для тебя.
← →
Kolan © (2008-03-20 11:14) [6]> бери лопату в руки и иди подметать улицу
Дворники в дубне настолько суровы, что подметают лопатой :).
← →
Ega23 © (2008-03-20 11:18) [7]
> Дворники в дубне настолько суровы, что подметают лопатой :).
Ломом, Колян. Исключительно ломом.
← →
Andrewtitoff © (2008-03-20 11:19) [8]Ну спасибо!, я смотрю вы все такие добрые и просто мечтаете поделиться опытом... =))))))))))))))
← →
Kolan © (2008-03-20 11:20) [9]Так поделились же.
1. Оъекты надо создавать.
2. У компонентов есть владелец.
А подробности в справке ищи, там они есть…
← →
Andrewtitoff © (2008-03-20 11:22) [10]А про владельцев можно немножко поподробнее? =))))
← →
Kolan © (2008-03-20 11:27) [11]> можно немножко
Можно, читайTComponent.Owner Property
в справке.
← →
Сергей М. © (2008-03-20 11:28) [12]
> Andrewtitoff © (20.03.08 11:22) [10]
Попросту компонент-владелец - это компонент, которому ты поручаешь быть "ответственным" за уничтожение твоего компонента, если ты сам явно не уничтожаешь свой компонент.
Компонент-владелец, перед тем как его уничтожают, уничтожает все существующие компоненты, владельцем которых он назначен.
В кач-ве владельца допустимо указывать nil - в этом случае ответственность за явное уничтожение своего компонента возлагается на тебя самого.
← →
Ega23 © (2008-03-20 11:28) [13]
> А про владельцев можно немножко поподробнее? =))))
Конечно можно.
Owner property (TComponent)
Indicates the component that is responsible for streaming and freeing this component.
Delphi syntax:
property Owner: TComponent;
C++ syntax:
__property TComponent* Owner = {read=FOwner};
Description
Use Owner to find the owner of a component. The Owner of a component is responsible for two things:
The memory for the owned component is freed when its owner"s memory is freed. This means that when a form is destroyed, all the components on the form are also destroyed.
The Owner is responsible for loading and saving the published properties of its owned controls.
By default, a form owns all components that are on it. In turn, the form is owned by the application. Thus when the application shuts down and its memory is freed, the memory for all forms (and all their owned components) is also freed. When a form is loaded into memory, it loads all of the components that are on it.
The owner of a component is determined by the parameter passed to the constructor when the component is created. For components created in the form designer, the form is automatically assigned as the Owner.
Warning: If a component has an Owner other than a form or data module, it will not be saved or loaded with its Owner unless you identify it as a subcomponent. To identify a component as a subcomponent, call the SetSubComponent method.
← →
Andrewtitoff © (2008-03-20 11:44) [14]2 Сергей М.
Пасибо!, теперь все ясно!,
тока ошибка так и неисчезла...
First chance exception at $7C81EB33. Exception class EAccessViolation with message "Access violation at address 00410E01 in module "Project_Lift.exe". Read of address 00000000". Process Project_Lift.exe (3976)
First chance exception at $7C81EB33. Exception class EAccessViolation with message "Access violation at address 00410A91 in module "Project_Lift.exe". Read of address 00000276". Process Project_Lift.exe (3976)
First chance exception at $7C81EB33. Exception class EAccessViolation with message "Access violation at address 00410A91 in module "Project_Lift.exe". Read of address 00000276". Process Project_Lift.exe (3976)
И указывает теперь почему то на строку юнита основной формы:
procedure TFormMain.Timer1Timer(Sender: TObject);
begin
.....
if form_New.Active then form_New.VPost.Caption:=copy(DateTimeToStr(time),12,8);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
end;
← →
Kolan © (2008-03-20 11:46) [15]> тока ошибка так и неисчезла…
Код покажи, мало ли как тебе ясно стало…
← →
Ega23 © (2008-03-20 11:46) [16]
> Andrewtitoff © (20.03.08 11:44) [14]
Стопудово form_New создавать религия не позволяет.
← →
Сергей М. © (2008-03-20 11:47) [17]
> ошибка так и неисчезла
Как это не исчезла ?
Исчезла)
А то что ты видишь - это уже другие ошибки)
← →
Andrewtitoff © (2008-03-20 11:54) [18]2 Ega23
В смысле?
2 Сергей М.
Ну да, тотока причина то в чем?, я вообще непонимаю уже ничего при чем тут эта сторока.... =((((
2 Kolan
Сейчас вот так пробовал:
....
procedure TFormMain.FormCreate(Sender: TObject);
begin
aaa.Create(nil);
aaa.Enabled:=true;
.....
end;
....
а вообще как я понял можно так:
aaa.Create(FormMain);
← →
Kolan © (2008-03-20 11:58) [19]> Ega23 © (20.03.08 11:46)
Не сработал телепатор твой :)
> aaa.Create(nil);
> aaa.Enabled:=true;
Andrewtitoff, дело в том, что ты вызываешь метод Create у еще не созданного aaa, и соотв получаешь AV.
Коструктор вызывают обращаясь к классу. Правильно написать так:aaa := TgsCatcher.Create(nil); //Создание
try
aaa.Enabled:=true; // Использование
finally
aaa.Free; //Удаление объекта.
end;
ЗЫ
С такими знаниями тебе этот компонент не нужен. Возьми Тейкстру и Пачеко и подучи язык.
← →
Сергей М. © (2008-03-20 11:58) [20]
> непонимаю уже ничего при чем тут эта сторока
см. [16]
> Сейчас вот так пробовал
> как я понял можно так
Нельзя. Ни так ни так. Потому что aaa - это не переменная типа TConponentClass.
← →
Andrewtitoff © (2008-03-20 12:59) [21]2 Kolan
Аааа..., а куда это писать то зачем сразу обьект?, мне же надо что бы это все дело работало на протяжении всей работы программы...
2 Сергей М
>см. [16]
А по русски можно?, какая еще религия?, в чем тут дело то? =))))
← →
Ega23 © (2008-03-20 13:01) [22]
> А по русски можно?, какая еще религия?, в чем тут дело то?
> =))))
Может всё-таки лопату?
← →
Andrewtitoff © (2008-03-20 13:04) [23]2 Kolan
А вот так правильно же будет? :
aaa := TgsCatcher.Create(FormMain);
try
aaa.Enabled:=true;
except
aaa.Free;
end;
← →
Сергей М. © (2008-03-20 13:04) [24]
> А по русски можно?
Можно и по-русски, если расскажешь, что такое "form_New")
← →
Andrewtitoff © (2008-03-20 13:14) [25]2 Сергей М.
Это просто еще одна форма моего приложения
unit Unit_New;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit_My, Unit_New_menu,Unit_FormShow, Buttons, ExtCtrls;
type
TForm_New = class(TForm)
Street: TComboBox;
HOUSE: TComboBox;
Prichina: TComboBox;
Zapisati: TBitBtn;
Nazad: TBitBtn;
VPost: TLabel;
Label1: TLabel;
CORP: TComboBox;
PARNUM: TComboBox;
Etaz: TComboBox;
Zayavitel: TEdit;
Image1: TImage;
procedure FormHide(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ZapisatiClick(Sender: TObject);
procedure StreetChange(Sender: TObject);
procedure NazadClick(Sender: TObject);
private
{Для перемещения формы вне заголовка объявляем процедуру}
procedure WMNCHitTest(var M:TWMNCHitTest);message wm_NCHitTest;
public
{ Public declarations }
end;
var
Form_New : TForm_New;
Fn : TFileStream;
Fstring : myString;
n : integer;
cs : string;
implementation
uses Unit_FormMain;
{$R *.dfm}
← →
Andrewtitoff © (2008-03-20 13:16) [26]2 Сергей М
Вот так вроде как все работает:
aaa := TgsCatcher.Create(FormMain);
try
aaa.Enabled:=true;
except
aaa.Free;
end;
Так же правильно будет?
← →
Ega23 © (2008-03-20 13:17) [27]
> Так же правильно будет?
Может хватит гадать, а?
Синтаксически - всё правильно. Логически - нет.
← →
Сергей М. © (2008-03-20 13:17) [28]
> Это просто еще одна форма моего приложения
Это не форма, это переменная.
Где и как она получает значение в ходе работы твоего программного шедевра ?)
← →
Andrewtitoff © (2008-03-20 13:24) [29]2 Ega23
А что не так то?....
← →
Andrewtitoff © (2008-03-20 13:28) [30]2 Сергей М.
В смысле?
procedure TFormMain.NewClick(Sender: TObject);
begin
TFileStream.create(MD+"\x.lft",fmOpenReadWrite);
Form_New.ShowModal;
//Form_New.Show;
end;
procedure TForm_New.FormShow(Sender: TObject);
var
// ix : integer;
fT : textFile;
sr : string;
begin
//
Form_New.top:=260;
Form_New.left:=107;
//
{ with Screen do
for ix := 0 to FormCount-1 do
if Forms[ix] <> Form_New then
Forms[ix].Enabled := false;
{}
ClearForm;
street.Clear;
AssignFile(fT,MD+"\System\Street.lft");
reset(ft);
repeat
Readln(ft,sr);
street.items.add(sr);
until eof(ft);
CloseFile(Ft);
Prichina.Clear;
AssignFile(fT,MD+"\System\NP.lft");
reset(ft);
repeat
Readln(ft,sr);
Prichina.items.add(sr);
until eof(ft);
CloseFile(Ft);
end;
Или Вы про что?
← →
Andrewtitoff © (2008-03-20 13:30) [31]2 2 Сергей М.
Это я проверяю работу TgsCatcher:
TFileStream.create(MD+"\x.lft",fmOpenReadWrite);
← →
Сергей М. © (2008-03-20 13:33) [32]
> Andrewtitoff © (20.03.08 13:28) [30]
Ладно, проехали.
Работает оно себе и работает, возвеселись и возрадуйся)
← →
Andrewtitoff © (2008-03-20 13:33) [33]Ясно..., в очередной раз всех утомил... =))))
← →
{RASkov} © (2008-03-20 13:43) [34]Я не думаю, что автор формы поубирал из автосоздаваемых и создает(или не создает) их динамически...
Я вот к ответам Коляна присоединяюсь :)
> [33] Andrewtitoff © (20.03.08 13:33)
Что, все уже?)
← →
Andrewtitoff © (2008-03-20 14:21) [35]Ну почему сразу так?, у меня в прграмме есть одна форма, которая убрана из автосоздаваемых..., правда остальные неубраны...
← →
{RASkov} © (2008-03-20 14:28) [36]> [35] Andrewtitoff © (20.03.08 14:21)
> у меня в прграмме есть одна форма, которая убрана из автосоздаваемых...
> Ну почему сразу так?,
Если не умеешь создавать(уничтожать) объекты сам, то рано тебе еще убирать формы из автосоздаваемых ;)
← →
Andrewtitoff © (2008-03-20 15:39) [37]2 Сергей М.
Не поможешь?, пожалуйста... =)))
http://delphimaster.net/view/2-1206014820/
← →
Kolan © (2008-03-20 16:00) [38]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.012 c