AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Free und AccessViolence

Ein Thema von Knut · begonnen am 9. Aug 2003 · letzter Beitrag vom 9. Aug 2003
Antwort Antwort
Knut

Registriert seit: 8. Aug 2003
38 Beiträge
 
Delphi 7 Personal
 
#1

Probleme mit Free und AccessViolence

  Alt 9. Aug 2003, 17:08
habe mal versucht images von oben nach unten durchs bild laufen zu lassen.

hat auch funktioniert bis ich gemerkt hab das alles immer langsamer wird.
da ist mir die idee gekommen, dass ich mein erzeugten images "unter" dem formblatt weiterlaufen.

habe dann das mit free versucht und nachdem die ersten parr images aus dem bild waren, kam ein AccessViolence problem.

hier mal der code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Timer1: TTimer;
    Timer2: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1 : TForm1;
  image : array of TImage;
// j : Integer = 0;
  i : Integer = 0;
  k : Integer = 0;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  randomize;
  if (k=0) or
     ((k mod 50) = 0) then begin
       SetLength(image,i+1);
       image[i] := TImage.Create(Form1);
       image[i].Left := Random((Width-image[i].Width));
       image[i].Picture.LoadFromFile('stein.bmp');
       image[i].Parent := Form1;
       image[i].Top := -image[i].Height;
       Inc(i);
     end
     else
     begin
      Inc(k);
     end;
      if i = 100 then timer1.Enabled := false;
 end;


procedure TForm1.Timer2Timer(Sender: TObject);
var
 j : integer;
begin
for j:= 0 to (i-1) do
begin
image[j].Top := image[j].Top + 1;
**if image[j].Top >= Height then image[j].Free;
end;
end;

end.
wenn ich die zeile mit den sternchen weglass funktioniert das progrämmchen recht gut bis auf das flackern und dass meine runden steine einen eckigen kasten haben.
Was nicht fliegen kann, kann auch nicht abstürzen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Probleme mit Free und AccessViolence

  Alt 9. Aug 2003, 17:18
Moin Knut,

wenn Du die Zeile ausführst, und das Image freigibst, dann wird der Versuch eine Eigenschaft des Images anzusprechen immer fehlschlagen, da das Image nicht mehr existiert.

Randomize sollte übrigens immer nur einmal ausgeführt werden, also pack's am besten in's OnCreate des Formulares.

Das Geschwindigkeitsproblem wird vermutlich von dieser Zeile verursacht:

SetLength(image,i+1); Jedesmal, wenn Du die Grösse des Arrays änderst wird neuer Speicher reserviert, und das bisherige Array umkopiert.
Am besten das Array möglichst ausreichend gross dimensionieren, und nur im Notfall vergrössern. Dann aber nicht um 1.

Schau Dir mal, entsprechende Windowsversion oder Tool vorausgesetzt, an, wie der Speicherverbrauch des Programmes ist. Der müsste ständig steigen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Knut

Registriert seit: 8. Aug 2003
38 Beiträge
 
Delphi 7 Personal
 
#3

Re: Probleme mit Free und AccessViolence

  Alt 9. Aug 2003, 17:33
alles klar hast natürlich recht mim speicher! werd jetzt die images immer wieder von unten nach oben holen

aber gibts eigentlich ne besser methode als mit nem array??

neuer thread richtig??
Was nicht fliegen kann, kann auch nicht abstürzen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz