如何才能讓動態產生的物件從畫面上消失? |
答題得分者是:banson1716
|
kagaya
中階會員 發表:74 回覆:175 積分:59 註冊:2002-12-28 發送簡訊給我 |
我用free釋放可是仍看得到
如何才能讓動態產生的物件從畫面上消失?
能教我嗎我是新手謝謝.我的原始碼如下 unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FileCtrl, ComCtrls, ShellCtrls, ExtCtrls, jpeg; type
TForm1 = class(TForm)
dr1: TShellTreeView;
dr2: TFileListBox;
dr3: TScrollBox;
Label1: TLabel;
Image1: TImage;
procedure dr1Change(Sender: TObject; Node: TTreeNode);
procedure dr2Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure yyyy(Sender: TObject);
end; var
Form1: TForm1;
ktxt: array of tlabel; kpic: array of TImage;
ktxtl: integer;
implementation {$R *.dfm} procedure TForm1.dr1Change(Sender: TObject; Node: TTreeNode);
begin
dr2.Directory := dr1.Path;
end; procedure TForm1.dr2Change(Sender: TObject); var z, xx, yy, ax: integer;
begin if ktxtl > 0 then
begin
for z := 0 to ktxtl - 1 do
begin
try
ktxt[z].free; //dr2變動時在這裡釋放
kpic[z].Free;
except
end;
end;
end;
if dr2.Items.Count > 0 then
begin
ktxtl := dr2.Items.Count;
xx := 0;
yy := 100;
setlength(ktxt, dr2.Items.Count);
setlength(kpic, dr2.Items.Count);
for z := 0 to dr2.Items.Count - 1 do
begin
ktxt[z] := tlabel.Create(form1);
ktxt[z].Parent := dr3;
ktxt[z].Width := 100;
ktxt[z].Height := 20;
ktxt[z].Left := xx;
ktxt[z].Top := yy;
ktxt[z].Alignment := taCenter;
ktxt[z].Caption := dr2.Items.Strings[z];
ktxt[z].Tag := z;
ktxt[z].Color := rgb(255, 255, 255);
ktxt[z].Show;
ktxt[z].OnClick := yyyy;
kpic[z] := TImage.Create(Form1);
kpic[z].Parent := dr3;
kpic[z].Width := 100;
kpic[z].Height := 100;
kpic[z].AutoSize := True;
kpic[z].Picture.LoadFromFile(dr1.Path '\' dr2.Items.Strings[z]);
kpic[z].AutoSize := false;
kpic[z].Stretch := true; if (kpic[z].Width >= kpic[z].Height) then
begin
ax := (kpic[z].Width div 100) 1;
end
else
begin
ax := (kpic[z].Height div 100) 1;
end;
kpic[z].Width := kpic[z].Width div ax;
kpic[z].Height := kpic[z].Height div ax;
kpic[z].Left := ((100 - kpic[z].Width) div 2) xx;
kpic[z].Top := ((100 - kpic[z].Height) div 2) yy - 100;
kpic[z].Tag := z;
kpic[z].Show;
kpic[z].OnClick := yyyy;
xx := xx 100;
if (xx > (dr3.Width - 100)) then
begin
xx := 0;
yy := yy 120;
end; end;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
ktxtl := 0;
end; procedure TForm1.yyyy(Sender: TObject);
var ak: integer;
begin
ak := Tlabel(sender).Tag;
if (ktxt[ak].Color = rgb(255, 255, 255)) then
begin
ktxt[ak].Color := rgb(200, 200, 255);
dr2.Selected[ak] := true;
end
else
begin
ktxt[ak].Color := rgb(255, 255, 255);
dr2.Selected[ak] := false;
end;
end; end. 發表人 - kagaya 於 2003/01/07 00:02:18
------
KUSO 無處不在 |
banson1716
高階會員 發表:55 回覆:182 積分:167 註冊:2002-04-14 發送簡訊給我 |
此段的釋放
procedure TForm1.dr2Change(Sender: TObject);
var z, xx, yy, ax: integer;
begin
if ktxtl > 0 then
begin
for z := 0 to ktxtl - 1 do
begin
try //ktxt[z].free; //dr2變動時在這裡釋放////////////XXXXXXXX 1
//kpic[z].Free; ////////////XXXXXXXX 2
except
end;
ktxt[z].free; //放於此處 1
kpic[z].Free; //放於此處 2
end;
end;
if dr2.Items.Count > 0 then
begin
ktxtl := dr2.Items.Count;
xx := 0;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |