Форум: "Основная";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
ВнизГде баг??? Найти похожие ветки
← →
Adrian_Copil_Minune (2002-11-19 12:26) [0]Имеется форма:
unit wait;
interface
uses
Windows, Messages, SysUtils, Variants, Forms, VCLUtils, RzPrgres, Animate,
GIFCtrl, RzPanel, StdCtrls, RzLabel, Controls, ExtCtrls, Classes,
Buttons, RzSpnEdt;
type
TfrmWait = class(TForm)
pnlCaption: TPanel;
RzPanel1: TRzPanel;
RxGIFAnimator1: TRxGIFAnimator;
lblCaption: TRzLabel;
btnClose: TRzRapidFireButton;
RzPanel2: TRzPanel;
lblText: TRzLabel;
ProgressBar: TRzProgressBar;
procedure btnCloseClick(Sender: TObject);
procedure FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override;
constructor CreateForm(AOwner: TComponent; Text: TCaption); virtual;
end;
var
frmWait: TfrmWait;
implementation
{$R *.dfm}
{ TfrmWait }
procedure TfrmWait.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := WS_THICKFRAME or WS_POPUP or WS_BORDER;
end;
procedure TfrmWait.btnCloseClick(Sender: TObject);
begin
Close();
end;
constructor TfrmWait.CreateForm(AOwner: TComponent; Text: TCaption);
begin
inherited Create(AOwner);
Position := poOwnerFormCenter;
CenterControl(lblCaption);
lblText.Caption := Text;
ProgressBar.Visible := False;
end;
procedure TfrmWait.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
Resize := False;
end;
end.
я ее создаю:
fmWait := TfrmWait.CreateForm(fmOwnerForm, "Loading. Please Wait...");
fmWait.Show();
и кокда нужно убиваю
procedure FreeForm(var Form);
var
Temp: TForm;
begin
Temp := TForm(Form);
Pointer(Form) := nil;
if Temp.Visible then
Temp.Close();
Temp.Free;
end;
if Assigned(fmWait) then
FreeForm(fmWait);
так вот: иногда при уничтожении формы зависает приложение, никак не пойму где ошибка...
Хелп плиз !!!
← →
han_malign (2002-11-19 12:40) [1]Попробуй не Free а Release
← →
Skier (2002-11-19 12:43) [2]>Adrian_Copil_Minune
Пока не очень понятно зачем нужна
procedure FreeForm(var Form);
Может быть в обработчике OnClose формы
написатьAction := caFree;
?
← →
Ерик (2002-11-19 12:48) [3]Skier © (19.11.02 12:43):
Просто чтобы удобнее было, я могу с тем же успехом написать
fmWait := TfrmWait.CreateForm(fmOwnerForm, "Loading. Please Wait...");
fmWait.Show();
...
fmWait.Close();
fmWait.Free();
fmWait := nil;
← →
Ерик (2002-11-19 12:52) [4]han_malign © (19.11.02 12:40)
>>Попробуй не Free а Release
Release returns immediately to the caller. It does not wait for the form to be freed before returning. - Мне это мешает...
← →
Skier (2002-11-19 12:56) [5]>Ерик
> я могу с тем же успехом написать
fmWait.Show();
...
fmWait.Close();
fmWait.Free();
И что ты получишь - у тебя форма создастся и тут же
прибъётся - извини, но это ерудна...
← →
Ерик (2002-11-19 13:03) [6]Skier © (19.11.02 12:56)
>>И что ты получишь - у тебя форма создастся и тут же
>>прибъётся - извини, но это ерудна...
Да нет... Скажем так, между созданием формы и ее уничтожении выплняется некоторый код после которого она и должна уничтожится...
На самом деле у меня она уничтожается при возникновения одного события (закрывется поток).
Но все это неважно.
Главное что это форма создается и где нибудь уничтожается. И иногда при этом (иммено при уничтожении формы) блокируется все приложение.
← →
Skier (2002-11-19 13:20) [7]>Ерик
> На самом деле у меня она уничтожается при возникновения
> одного события (закрывется поток).
> Но все это неважно
Сдаётся мне что это как раз важно, т.к. с методами и свойствами формы ты должен работать в контексте основного потока приложения,
т.е. использовать метод Sychronize() TThread-а.
← →
Ерик (2002-11-19 13:23) [8]Skier © (19.11.02 13:20):
Форма уничтожается в контексте основного потока приложения когда поток уже не существует...
← →
Skier (2002-11-19 13:25) [9]>Ерик
Если так , то действительно, попробуй Release.
Не поможет ?
← →
Ерик (2002-11-19 13:30) [10]Ладно попробую еще подумать, иногда помогает :)
Спасибо за внимание.
← →
Ерик (2002-11-19 14:56) [11]Ребята! с Release вроде не зависает !!!
Может это связанно с тем что форма находится в dll.
Успехов.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c