Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизНаследник от TCustomComboBox Найти похожие ветки
← →
snake1977 © (2004-12-08 10:12) [0]Здравствуйте! помогите понять в чем проблемма. Сделал компонент наследника от TCustomCombobox, добавив свойчтва и методы для хранения списка Items в ini файле. Все работает, но в DesignTime если закрыть приложение, выскакивает окно INIComboBox6 has no parent window.
Почему так происходит.
вот исходник компонента
TINIComboBox = class(TCustomComboBox)
private
{ Private declarations }
fININame:String;
fINISectionName:String;
fList:TStringList;
protected
{ Protected declarations }
Procedure OnExitF(Sender:TObject);
public
{ Public declarations }
Constructor Create(AOwner:TComponent); override;
Destructor Destroy; override;
Procedure SaveList;
Procedure LoadList;
published
{ Published declarations }
property ININame:String read fININame write fININame;
property INISectionName:String read fINISectionName write fINISectionName;
property Style; {Must be published before Items}
property Anchors;
property BiDiMode;
.....
property OnStartDock;
property OnStartDrag;
property Items; { Must be published after OnMeasureItem }
end;
procedure Register;
implementation
Uses INIFiles;
procedure Register;
begin
RegisterComponents("Standard", [TINIComboBox]);
end;
Constructor TINIComboBox.Create(AOwner:TComponent);
Begin
inherited Create(Aowner);
OnExit:=OnExitf;
Sorted:=True;
fList:=TStringList.Create;
End;
Procedure TINIComboBox.SaveList;
Var ini:TINIFile;
i:Integer;
Begin
if fININame<>"" Then
Begin
if Pos(":",fININame)<=0 Then fININame:=ExtractFilePath(ParamStr(0))+fININame;
ini:=TINIFile.Create(fININame);
ini.EraseSection(fINISectionName);
for i:=0 to fList.Count-1 do
Begin
ini.WriteString(INISectionName,IntToStr(i),fList[i]);
End;
ini.UpdateFile;
ini.Free;
End;
end;
Procedure TINIComboBox.LoadList;
Var ini:TINIFile;
i:Integer;
List:TStringList;
Begin
if fININame<>"" Then
Begin
Items.Clear;
if Pos(":",fININame)<=0 Then fININame:=ExtractFilePath(ParamStr(0))+fININame;
ini:=TINIFile.Create(fININame);
List:=TStringList.Create;
ini.ReadSectionValues(fINISectionName,List);
for i:=0 to List.Count-1 do
Begin
fList.Append(List.Values[List.Names[i]]);
Items.Append(List.Values[List.Names[i]]);
End;
ini.Free;
List.Free;
End;
end;
Destructor TINIComboBox.Destroy;
Begin
SaveList;
fList.Free;
Inherited;
End;
Procedure TINIComboBox.OnExitF(Sender:TObject);
Begin
if Items.IndexOf(Text)=-1 Then
Begin
Items.Append(Text);
fList.Append(Text);
End;
End;
← →
Рамиль © (2004-12-08 10:36) [1]snake1977 © (08.12.04 10:12)
DesignTime если закрыть приложение,
1. Э.. объясни, как закрыть приложение в Design Time?
2. Не работай с файлом в Design Time.
3.
>OnExit:=OnExitf; - не делай так. Перекрой метод диспетчиризации (DoExit)
← →
snake1977 © (2004-12-08 10:49) [2]>>1. Э.. объясни, как закрыть приложение в Design Time?
я имел ввиду что когда я нахожусь в дельфи и пытаюсь закрыть проект, то дельфя вот так вот ругается
>>2. Не работай с файлом в Design Time.
как не рабоать , ежели я делаю программу, ставлю на форму этот компонент
>>3.
>OnExit:=OnExitf; - не делай так. Перекрой метод диспетчиризации >(DoExit)
где он описан??
я не нашел его в исходниках TCustomComboBox
:(
← →
snake1977 © (2004-12-08 11:11) [3]заработала!
но почему вызывалось событие onExit в режиме разработки.... непонял :(
чесслово
я всегда думал что эти события срабатывают только при непосредственно работе самой программы
← →
Рамиль © (2004-12-08 11:15) [4]snake1977 © (08.12.04 11:11) [3]
как не рабоать , ежели я делаю программу, ставлю на форму этот компонент
if not (csDesigning in ComponentState)
snake1977 © (08.12.04 11:11) [3]
где он описан??
я не нашел его в исходниках TCustomComboBox
Не там искал, TWinControl, если не ошибаюсь, или что то близкое к нему.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c