Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
ВнизПростой вопрос. Найти похожие ветки
← →
solo (2002-12-13 23:11) [0]Здравствуйте уважаемые, вроде на первый взгляд все просто, но торможу :((
КОД:
TObj = class
private
FButton: TButton;
FPanel: TPanel;
procedure OnButtonClick(Sender: TObject);
public
constructor Create;
end;
<Skip>
constructor TObj.Create;
begin
FPanel:= TPanel.Create(Form3);
FPanel.Parent:= Form3;
FButton:= TButton.Create(FPanel);
FButton.Parent:= FPanel;
FButton.OnClick:= OnButtonClick;
end;
procedure TObj.OnButtonClick(Sender: TObject);
begin
FPanel.Free;
end;
<Skip>
Вообщем понятно, есть панель, и лежащая на ней кнопка. Надо, по щелчку на
кнопке закрывать панель. Вылетает "Access violation". Подскажите:
1) как реализовать задуманное
2) почему "Access violation"
3) что почитать, чтобы получше разобраться в подобных вещах.
← →
Вообще (2002-12-14 03:21) [1]говоря - "закрывать" панель и FPanel.Free - это "Две Большие Разницы"!
← →
oldman (2002-12-14 06:03) [2]Стандартная ошибка!!!
← →
Fantasist (2002-12-14 06:26) [3]
> oldman © (14.12.02 06:03)
> Стандартная ошибка!!!
Хороший ответ. :)
Прежде всего:
> FPanel:= TPanel.Create(Form3);
вот таким кодом ты делаешь Form3 владельцем FPanel. Владелец удаляет все свои компоненты при разрушении. Так что если хочешь сам удалять панель пиши: FPanel:= TPanel.Create(nil).
Второе: может тебе не нужно удалять панель, а всего лишь сделать ее невидимой?
← →
oldman (2002-12-14 06:50) [4]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure OnButtonClick(Sender: TObject);
private
FPanel: TPanel;
FButton: TButton;
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
FPanel:= TPanel.Create(Form1);
FPanel.Parent:= Form1;
FButton:= TButton.Create(FPanel);
FButton.Parent:= FPanel;
FButton.OnClick:= OnButtonClick
end;
procedure TForm1.OnButtonClick(Sender: TObject);
begin
FPanel.Free;
end;
end.
И что интересно, никакого "Access violation"
← →
oldman (2002-12-14 07:05) [5]Если SpeedButton1 выкинуть, а его OnClick повесить на Form1.OnActivate тоже работает...
← →
Song (2002-12-14 10:53) [6]2Fantasist © (14.12.02 06:26)
>>Так что если хочешь сам удалять панель пиши: FPanel:= TPanel.Create(nil).
Самому можно удалять с любым Parent"ом.
← →
Fantasist (2002-12-14 23:40) [7]
> Самому можно удалять с любым Parent"ом
Parent и Owner - совершенно разные вещи.
← →
Тем (2002-12-15 02:50) [8]не менее!
Убивать в обработчике OnClick кнопки ее владельца (Owner) - ???
Просто нет слов!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c