Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.23;
Скачать: CL | DM;

Вниз

Простой вопрос.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
4-75054
Lexa1900
2002-11-06 20:43
2002.12.23
Чем может помочь функция GetCapture?


8-74845
Юрий К
2002-09-06 02:01
2002.12.23
Воспроизведение аудио файлов


14-74982
AFrolov
2002-12-03 12:57
2002.12.23
Про мат. статистику


7-74999
dimod
2002-10-17 17:52
2002.12.23
Модификация системной даты/времени


1-74797
ORF
2002-12-11 13:00
2002.12.23
Проблема с созданием редактора свойств компонента D6,D7