AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Andorra 2] Problem beim Freigeben des GUI-Editors
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra 2] Problem beim Freigeben des GUI-Editors

Ein Thema von Looper · begonnen am 7. Mär 2008 · letzter Beitrag vom 7. Mär 2008
Antwort Antwort
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#1

[Andorra 2] Problem beim Freigeben des GUI-Editors

  Alt 7. Mär 2008, 19:56
Hi Leuts,
ich stehe vor einem Problem:
Und zwar schaffe ich es nicht das GUI anzuzeigen und wenn die Instanz dann am Ende freigegeben werden soll, kommt im Intervall meines Timers ein Fehlermeldung mit nem Nilpointer.

Mein Code sieht wiefolgt aus:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Addraws, AdClasses, AdTypes, ExtCtrls, StdCtrls, AdComponents,
  AdGUIConnector, AdGUI;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Timer1Timer(Sender: TObject);
  private
  public
    AdDraw : TAdDraw;
    AdGUI : TAdGUI;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdDraw := TAdDraw.Create(self);
  AdDraw.DllName := 'AndorraDX93D.dll';
  AdDraw.Options := AdDraw.Options + [DoFullscreen];
  AdDraw.Display.Width := 800;
  Addraw.Display.Height := 600;
  AdDraw.Display.BitCount := 32;
  if not AdDraw.Initialize then
  begin
    ShowMessage('Andorra 2D konnte nicht gestartet werden.');
    halt;
  end;
  AdGUI := TAdGUI.Create(AdDraw);
  AdGUI.Skin.LoadFromFile('sunna.axs');
  AdGUI.Cursors.LoadFromFile('Cursors.xml');
  AdGUI.LoadFromFile('Test.axg');
  ShowMessage('Es wurde alles initialisiert!');
  Timer1.Enabled := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  AdDraw.Free;
  AdGui.Free; //lässt man diese Zeile weg, kommen keine Fehlermeldungen
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (key=#27) then
    halt;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  AdDraw.ClearSurface(clblack);
  AdDraw.Flip;
end;

end.
Ist halt eigentlich nur ein schwarzer Bildschirm mit der GUI drauf, die nur aus einem Button besteht.
Hoffe ihr könnt mir helfen, ich habe die Vermutung, dass bei mir diese Bedingung nicht erfüllt ist
Zitat:
Beachten Sie, dass Sie zum kompilieren eines Programms mit Andorra 2D GUI die Komponentensammlung "JVCL" installiert haben müssen, bzw. die benötigte Bibliothek "JvSimpleXML" und alle dazugehörigen Dateien im Suchpfad von Delphi eingetragen sind (unter Delphi in Tools->Optionen->Bibliothek - Win32).
Da ich nicht genau weiß wie das geht, habe ich einfach das JVCL-Projekt komplett gedownloadet und zu den Suchpfad und Bibliothekssuchpfad von Delphi hinzugefügt.
habe ich dabei was falsch gemacht?

mfg Looper
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [Andorra 2] Problem beim Freigeben des GUI-Editors

  Alt 7. Mär 2008, 20:08
Hallo,

In der neuen Version (0.3.5) wird die JVCL/JCL gar nicht mehr benötigt (habe ich vergessen zu sagen). Bei einer älteren Version würde es ohne JCL nicht kompilieren.

Ich sehe folgende Fehler in deinem Code:

1. Die GUI wird nach dem AdDraw freigegeben. Dies führt zu der Zugriffsverletzung. Das GUI-System beinhaltet Klassen, die auf das AdDraw zugreifen und von diesem Elemente reservieren. Beim Freigeben möchten Sie diese natürlich dem AdDraw zurückgeben. Doch leider existiert dieses nicht mehr.
Du solltest Elemente immer in umgekehrter Erstellungsreihenfolge freigeben.

2. Dein Timer-Code ist unvollständig. Vier Anweisungen sind auf jeden Fall von Nöten:
Delphi-Quellcode:
AdDraw.ClearSurface(0); //Löscht das Surface
AdDraw.BeginScene; //Beginnt eine neue Szene


//Hier muss dein Code hin:
AdGUI.Update(AdPerformanceCounter.TimeGap / 1000);

AdDraw.EndScene; //Beendet die Szene - hiernach kann nichts mehr gezeichnet werden.
AdDraw.Flip; //Aktualisiert die Anzeige
Wenn du noch Fragen hast melde dich,
Andreas
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#3

Re: [Andorra 2] Problem beim Freigeben des GUI-Editors

  Alt 7. Mär 2008, 20:41
Schonmal danke für die schnelle Antwort. Ich habe den Quelltext jetzt so geändert. Die Fehlermeldung kommt beim Beenden nicht mehr. Allerdings wird die GUI immernoch nicht angezeigt.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Addraws, AdClasses, AdTypes, ExtCtrls, StdCtrls, AdComponents,
  AdGUIConnector, AdGUI, AdPerformanceCounter;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Timer1Timer(Sender: TObject);
  private
  public
    AdDraw : TAdDraw;
    AdGUI : TAdGUI;
    AdPerformanceCounter : TAdPerformanceCounter;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdDraw := TAdDraw.Create(self);
  AdDraw.DllName := 'AndorraDX93D.dll';
  AdDraw.Options := AdDraw.Options + [DoFullscreen];
  AdDraw.Display.Width := 800;
  Addraw.Display.Height := 600;
  AdDraw.Display.BitCount := 32;
  if not AdDraw.Initialize then
  begin
    ShowMessage('Andorra 2D konnte nicht gestartet werden.');
    halt;
  end;
  AdGUI := TAdGUI.Create(AdDraw);
  AdGUI.Skin.LoadFromFile('sunna.axs');
  AdGUI.Cursors.LoadFromFile('Cursors.xml');
  AdGUI.LoadFromFile('Test.axg');
  AdPerformanceCounter := TAdPerformanceCounter.Create;
  Timer1.Enabled := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  AdPerformanceCounter.Free;
  AdGUI.Free;
  AdDraw.Free;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (key=#27) then
    halt;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  AdPerformanceCounter.Calculate;
  AdDraw.ClearSurface(clblack);
  AdDraw.BeginScene;
  AdGUI.Update(AdPerformanceCounter.TimeGap/1000);
  AdDraw.EndScene;
  AdDraw.Flip;
end;

end.
Die Gui sieht wiefolgt aus:
Delphi-Quellcode:
<?xml version="1.0" encoding="iso-8859-1"?>
  <TAdGUI name="AdGUI1" alpha="255" cursor="default" enabled="-1" height="51" width="352" hint="" showhint="0" visible="-1" x="0" y="0" fontcolor="0" fontname="" fontdata="00000000">
    <TAdButton name="AdButton1" alpha="255" cursor="default" enabled="-1" height="25" width="125" hint="" showhint="0" visible="-1" x="8" y="3" fontcolor="0" fontname="" caption="Holz"/>
  </TAdGUI>
Irgendwas muss ich ja immernoch falsch machen?
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

Re: [Andorra 2] Problem beim Freigeben des GUI-Editors

  Alt 7. Mär 2008, 21:03
Ich sehe jetzt direkt keinen Fehler mehr - bist du dir sicher, das die Zeichenroutine aufgerufen wird? Hast du einen PNG-Loader eingebunden? Dabei stehen zur Auswahl:

-AdPNG.pas --> Benötigt die Bibliothek "PNGDelphi"
-AdDevIL.pas --> Benötigt die DevIL Header im Suchpfad sowie die DLL "DevIL.dll" im Programmverzeichnis
-AdFreeImage.pas --> Benötigt die FreeImage Header im Suchpfad sowie die DLL "FreeImage.dll" im Programmverzeichnis
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Looper

Registriert seit: 28. Sep 2007
Ort: Hamburg
131 Beiträge
 
Delphi XE2 Professional
 
#5

Re: [Andorra 2] Problem beim Freigeben des GUI-Editors

  Alt 7. Mär 2008, 21:16
Also der gesamte Code ist der, der da oben zu sehen ist. Es soll lediglich ein schwarzer Bildschirm und die GUI (ein Button) erscheinen.
Um die Unit AdPNG.pas einzubinden brauche ich die ja nur unter uses hinzufügen. Und wo soll ich dann die Zeichenroutine aufrufen?

mfg Looper

PS: Ich finde es richtig toll wie aktiv du hier bist und zur Seite stehst sobald Probs auftreten


//Aha, man muss also nur die AdPNG.pas einbinden. Jetzt wird die GUI angezeigt. Bei weiteren Probs (die es bestimmt wieder geben wird^^, melde ich mich wieder)
Thema kann geschlossen werden.
  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 06:41 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