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

Вниз

Access Violation   Найти похожие ветки 

 
Jaxtor   (2003-05-30 15:32) [0]

Специалисты по Access Violation, помогите! Почему возникает Access Violation в последней строчке моего кода?

var ParametersForm:TForm;

...
ComboBoxVariable:=TCombobox.Create(ParametersForm);
ComboBoxVariable.Parent:=ParametersForm;
ComboBoxVariable.Left:=MaxDescriptionSymbols*6;
ComboBoxVariable.Top:=10;
ComboBoxVariable.Name:="CategoryComboBox";
ComboBoxVariable.OnChange:=OnCategoryComboBoxChange;
(FindComponent("CategoryComboBox") as TComboBox).Text:="";


 
DmS   (2003-05-30 15:39) [1]

может быть

FindComponent("CategoryComboBox") = NIL


 
Юрий Зотов   (2003-05-30 15:39) [2]

(ParametersForm.FindComponent("CategoryComboBox") as TComboBox).Text := "";



 
RoadStar   (2003-05-30 15:40) [3]

Контекст?


 
MBo   (2003-05-30 15:42) [4]

1) Что?.FindComponent?
2) результат FindComponent стоит проверять на Nil
3) в каком месте программы все это происходит?


 
Jaxtor   (2003-05-30 15:49) [5]

Юрий Зотов>

(ParametersForm.FindComponent("CategoryComboBox") as TComboBox).Text := "";

- тоже Access Violation.

RoadStar>
Модуль Price:

procedure TPriceForm.ProductParametersClick(Sender: TObject);
begin
ParametersForm:=TParametersForm.Create(Application);
ParametersForm.Show;
end;


Модуль Parameters:

unit Parameters;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, IBCustomDataSet, StdCtrls, Mask, DBCtrls, DBCtrlsEh,
DBLookupEh, IBSQL, IBDatabase, IBStoredProc, ExtCtrls, IBQuery, Grids,
DBGrids;

type
TParametersForm = class(TForm)
procedure OnCategoryComboBoxChange(Sender:TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Visualization;
private
{ Private declarations }
public
{ Public declarations }
end;

var
ParametersForm: TParametersForm;

implementation

uses DataMod, Price, CharacteristicsDataMod;

{$R *.dfm}



procedure TParametersForm.FormCreate(Sender: TObject);
begin
ParametersForm.Visualization;
end;


procedure TParametersForm.Visualization;
ComboBoxVariable: TComboBox;
CheckBoxVariable: TCheckBox;
begin
ComboBoxVariable:=TCombobox.Create(ParametersForm);
ComboBoxVariable.Parent:=ParametersForm;
ComboBoxVariable.Left:=MaxDescriptionSymbols*6;
ComboBoxVariable.Top:=10;
ComboBoxVariable.Name:="CategoryComboBox";
ComboBoxVariable.OnChange:=OnCategoryComboBoxChange;
(ParametersForm.FindComponent("CategoryComboBox") as TComboBox).Text:="";

Вот тут-то Access Violation возникает!


 
Кулюкин Олег   (2003-05-30 15:52) [6]

А почему не
ComboBoxVariable.Text:="" ??????




 
reonid   (2003-05-30 15:56) [7]

Странно...
Даже если FindComponent ничего не найдёт,
должна быть EInvalidCast (как результат nil as TComboBox).


 
Skier   (2003-05-30 15:57) [8]

>Jaxtor © (30.05.03 15:49)

Если это не поможет то косяк видимо в теле OnCategoryComboBoxChange

var
AFoundComponent : TComponent;
//.............
begin
//.............
AFoundComponent := FindComponent("CategoryComboBox");
if Assigned(AFoundComponent) and (AFoundComponent is TCombobox) then TComboBox(AFoundComponent).)Text := EmptyStr;

//.............
end;


 
Skier   (2003-05-30 15:59) [9]

скобочка лишняя...поправлюсь : TComboBox(AFoundComponent).Text := EmptyStr;


 
Jaxtor   (2003-05-30 15:59) [10]

>Кулюкин Олег Не догадался так сделать!


 
reonid   (2003-05-30 16:02) [11]

На всякий случай спрошу - а сама-то ParametersForm
создана?


 
Jaxtor   (2003-05-30 16:23) [12]

>reonid Вот в том то и дело, что ParametersForm = nil все время. А почему так, не знаю. Ведь делаю-таки ParametersForm:=TParametersForm.Create(Application);


 
MBo   (2003-05-30 16:26) [13]

А если делать это не в OnCreate, а, скажем, в OnShow, или в перекрытом CreateWnd?


 
Skier   (2003-05-30 16:26) [14]

Мда, прямо-таки головоломка...


 
Jaxtor   (2003-05-30 16:32) [15]

>MBo У меня раньше все на Show висело. Но я перешел на Create потом по разным соображением.

Есть еще информация - через Debugger получается, что после ParametersForm:=TParametersForm.Create(Application) меня выносит
в модули *.pas библиотеки Ehlib и там все вертится, а после выхода от туда - ParametersForm=nil. Где туплю????


 
MBo   (2003-05-30 16:35) [16]

Так когда на OnShow висело, работало?


 
Skier   (2003-05-30 16:36) [17]

>Jaxtor © (30.05.03 16:32)

А где и как ты пишешь ParametersForm := TParametersForm.Create(Application) мы должны угадать ?


 
Jaxtor   (2003-05-30 16:38) [18]

>Skier
AFoundComponent := FindComponent("CategoryComboBox"); = NIL!!!!


 
Jaxtor   (2003-05-30 16:40) [19]

>MBo Тогда другой код был.
>Skier

procedure TPriceForm.ProductParametersClick(Sender: TObject);
begin
ParametersForm:=TParametersForm.Create(Application);
ParametersForm.Show;
end;



 
Skier   (2003-05-30 16:41) [20]

>Jaxtor © (30.05.03 16:38)
Поэтому у тебя и AV. Видимо "портится" ссылка ParametersForm Разбирайся...


 
Sandman25   (2003-05-30 16:43) [21]

Jaxtor © (30.05.03 15:49)

ParametersForm:=TParametersForm.Create(Application);
ParametersForm.Show;

procedure TParametersForm.FormCreate(Sender: TObject);
begin
ParametersForm.Visualization;
end;

Вы в OnCreate вызываете метод формы, которой еще нет!!! Надо так:

procedure TParametersForm.FormCreate(Sender: TObject);
begin
Visualization;
end;

Тогда и в ParametersForm иногда будет не nil появляться :)
Только лучше создавать форму с проверкой.

if ParametersForm = nil then ParametersForm:=TParametersForm.Create(Application);
ParametersForm.Show;

Иначе придется каждый раз создавать форму, а при ее закрытии не забывать ее удалять самостоятельно (то есть Application в Create можно не указывать).


 
Skier   (2003-05-30 16:43) [22]

>Jaxtor © (30.05.03 16:40)
А форма ParametersForm у тебя наверное ещё и в autocreate стоит,
нет ?


 
Jaxtor   (2003-05-30 16:44) [23]

>Skier Я со вчерашнего дня с обеда разбираюсь(один между прочим).


 
Jaxtor   (2003-05-30 16:45) [24]

>Skier Нет, в autocreate не стоит. Я ученый в этом:)


 
Sandman25   (2003-05-30 16:47) [25]

Тьфу ты. Вроде бы натормозил я. Игнорируйте Sandman25 © (30.05.03 16:43)

Зря я сегодня в полпятого утра проснулся :)


 
MBo   (2003-05-30 16:48) [26]

не соблаговолишь попробовать перставить код в OnShow?


 
Jaxtor   (2003-05-30 16:55) [27]

MBo> Естественно, что через Show все заработало.


 
Sandman25   (2003-05-30 16:56) [28]

Только что сделал похожий проект.
Все-таки я был прав. При вызове ParametersForm.Visualization ParametersForm еще равно nil. Нужно просто вызывать с Self, а не ParametersForm.

Определенно, надо больше спать.


 
Sandman25   (2003-05-30 16:59) [29]

Видимо, обработчик OnCreate вызывается напрямую из конструктора, а не посылается событие в очередь сообщений, как это происходит с OnShow.


 
MBo   (2003-05-30 16:59) [30]

>Jaxtor
В момент создания формы окна формы и окна комбобокса еще не существует, а Windows для операций со строками комбобокса нужен дескриптор окна. Вот почему я уже давно сказал про CreateWnd.



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

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

Наверх





Память: 0.51 MB
Время: 0.138 c
4-35113
raven2003
2003-04-13 21:58
2003.06.12
Как получить дату последнего открытия и измененрия файла!?!


1-34836
Ivan P
2003-06-02 23:25
2003.06.12
WinXp(выключение компа)


6-34948
Sherbacov
2003-04-08 21:05
2003.06.12
Как создать свой протокол.


14-35033
SVR
2003-05-26 23:58
2003.06.12
Нужен художник


7-35082
xrip
2003-04-09 00:33
2003.06.12
Как под виндами програмировать PCI Configuration Registers ?





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