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

Вниз

Где баг???   Найти похожие ветки 

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

Наверх




Память: 0.49 MB
Время: 0.011 c
3-92932
TDan
2002-11-12 02:29
2002.11.28
DBEdit


3-92844
zool
2002-11-12 16:59
2002.11.28
Подскажите по поводу dbf


1-93127
VJar
2002-11-18 01:23
2002.11.28
Очистка Image


3-92873
GrayHound
2002-11-10 10:34
2002.11.28
Посоветуйте OLE DB провайдер для таблиц xBase


3-92855
MaxM
2002-11-05 23:04
2002.11.28
---|Ветка была без названия|---