Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Andorra 2D - graues Fenster (https://www.delphipraxis.net/153057-andorra-2d-graues-fenster.html)

Noobmaster 19. Jul 2010 13:18

Andorra 2D - graues Fenster
 
Hallo Leute!
Ich wollte jetzt einmal ein etwas "größeres" Projekt mit Lazarus angehen und kam auf die Idee ein 2d-Billardspiel zu programmieren. Da ich auf diverse Probleme gestoßen bin, habe ich mir gedacht, dass ich eine Bibliothek benutze (also zum Beispiel SDL oder Direct-X). Weil Andorra 2d aber extra für 2d-Spiele erstellt wurde und dort unter Lazarus auch Open GL unterstützt wird, habe ich Andorra 2d genommen und kompliliert. Beim Tutorial habe ich allerdings folgendes Problem: Bei mir kommt nicht der erhoffte Spruch "Andorra 2d works with Lazarus, too" im schwarzen Fenster, sondern nur das ganz normale graue Fenster "Form1". Der Name "Form1" verschwindet oben aus der Leiste und wenn ich Buttons über den Objektinspektor einbaue, dann werden diese in der laufenden Anwendung nicht gezeigt. Auch wenn ich die Fensterfarbe über den Objektinspektor verändere, bleibt das Fenster nach dem Programmstart grau.
Ich hoffe ihr könnt mir helfen und bedanke mich jetzt schonmal.

Der Link zum Tutorial und der so abkopierte Quellcode - Anmerkung: an einer Stelle steht dort @Idle, dort muss das @ weg soweit ich weiß
http://andorra.sourceforge.net/index.php?bb=lazarus1ger

blackfin 19. Jul 2010 13:55

AW: Andorra 2D - graues Fenster
 
Zitat:

und wenn ich Buttons über den Objektinspektor einbaue, dann werden diese in der laufenden Anwendung nicht gezeigt.
Versuchst du denn, normale TButtons über die Zeichenfläche von Andorra (OpenGL) zu legen?
Wenn ja, dann kann das gar nicht gut gehen. Über ein OpenGL-Fenster kannst du keine VCL/LCL-Controls legen.


Edit:
Meiner Meinung nach fehlt da auch noch in der Idle-Procedure ein "Done := false" am Schluss, oder täusche ich mich da?

Noobmaster 19. Jul 2010 14:00

AW: Andorra 2D - graues Fenster
 
Ja, ich muss gestehen, dass ich genau das versucht habe. Allerdings würde mich auch viel mehr interessieren, wieso der Quellcode bei nicht so funktioniert, wie er im Tutorial angegeben wird...

Hier mein Quellcode:
Delphi-Quellcode:
unit Unit1;

{$MODE DELPHI}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, AdDraws, AdClasses;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { private declarations }
  public
  procedure Idle(Sender: TObject; var Done:boolean);
  AdDraw : TAdDraw;
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdDraw := TAdDraw.Create(self);
  AdDraw.DllName := 'AndorraOGLLaz.dll';
  AdDraw.Initialize;
  Application.OnIdle := Idle;
end;

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

procedure TForm1.Idle(Sender: TObject; var Done:boolean);
begin
  AdDraw.ClearSurface(0);
  AdDraw.BeginScene;
  with AdDraw.Canvas do
  begin
    Font := AdDraw.Fonts.GenerateFont('Arial', 24, []);
    TextOut(0,0,'Andorra 2D...');
    Font := AdDraw.Fonts.GenerateFont('Arial', 10, []);
    TextOut(0,30,'...works with Lazarus too');
  end;
  AdDraw.EndScene;
  AdDraw.Flip;
  Done := false;
end;

initialization
  {$I Unit1.lrs}

end.
Das Programm startet jetzt, aber danach tritt sofort ein SIGSEGV Fehler aus...
Dann springt der Cursor in eine Unit namens "AdFontFactory" in die Zeile "FLastKey := nil;"
Wo liegt jetzt der Fehler?

blackfin 19. Jul 2010 14:04

AW: Andorra 2D - graues Fenster
 
Was passiert denn, wenn du nach
Delphi-Quellcode:
AdDraw.Flip;
noch ein
Delphi-Quellcode:
Done := false;
setzt?

Ich befürchte, das Idle wird so nur einmal ausgeführt.

igel457 19. Jul 2010 14:11

AW: Andorra 2D - graues Fenster
 
Das mit dem
Delphi-Quellcode:
Idle := false
sollte nicht die Lösung des Problems sein...

Kannst du mal Testen, was passiert, wenn du nicht "Form1" als Parameter für TAdDraw.Create übergibst sondern "nil"?

Noobmaster 19. Jul 2010 14:30

AW: Andorra 2D - graues Fenster
 
Also ich habe den Parameter "self" ausprobiert und auch den Parameter "nil" jedes Mal tritt jetzt dieser SIGSEGV exception Fehler auf. Mein Quellcode steht oben

igel457 19. Jul 2010 15:02

AW: Andorra 2D - graues Fenster
 
Zitat:

Zitat von Noobmaster (Beitrag 1036172)
Dann springt der Cursor in eine Unit namens "AdFontFactory" in die Zeile "FLastKey := nil;"
Wo liegt jetzt der Fehler?

Das würde eigentlich bedeuten, dass die Initialisierung fehlschlägt...

Verwendest du eigentlich Linux oder Windows, kompilierst du für 32 oder 64 Bit?

Edit: Gerade nochmal mit dem neusten Paket unter Linux getestet: Nachdem ich alle Abhängigkeiten installiert hatte und einige Symlinks für die gesuchten Bibliotheken erstellt habe lief zumindest die "NonVCL" Demo mit Lazarus ohne Probleme.

Ich Denke dein Problem könnte sein, dass du noch die folgenden Units einbinden musst:
Delphi-Quellcode:
AdComponentWindow, AdStdWindow
Und füge mal wie in allen anderen Tutorials beschrieben die Fehlerbehandlung für den Fall ein dass die Initialisierung fehlschlägt und lasse dir mittels TAdDraw.GetLastError die letzte Fehlermeldung ausgeben.

JamesTKirk 20. Jul 2010 09:34

AW: Andorra 2D - graues Fenster
 
Hi!

1. Verwendest du Windows oder Linux? 32 oder 64 Bit?

2. Ich vermute die Anwendung kann die AndorraOGLLaz.dll nicht finden. Liegt die denn im selben Verzeichnis, in dem auch die Anwendung erzeugt wird (im Fall von Windows)?

Gruß,
Sven

Noobmaster 20. Jul 2010 10:08

AW: Andorra 2D - graues Fenster
 
Folgendes hat sich geändert: Ich habe die dll in den Ordner der Exe kopiert. Ich habe die Fehlerbehandlung eingebaut und tatsächlich beschwert er sich nun, dass die Initialisierung fehlgeschlagen ist.
Ich benutze übrigens Windows 32Bit.
Hier mein momentaner Quellcode:
Delphi-Quellcode:
unit Unit1;

{$MODE DELPHI}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, AdDraws, AdClasses,AdComponentWindow,AdStdWindow;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { private declarations }
  public
  procedure Idle(Sender: TObject; var Done:boolean);
  AdDraw : TAdDraw;
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdDraw := TAdDraw.Create(Form1);
  AdDraw.DllName := 'AndorraOGLLaz.dll';
  if AdDraw.Initialize then
  begin
    Application.OnIdle := Idle;
  end
  else
  begin
    ShowMessage('Error while initializing Andorra 2D. Try to use another display'+
                'mode or another video adapter.');
    halt;
  end;
end;

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

procedure TForm1.Idle(Sender: TObject; var Done:boolean);
begin
  AdDraw.ClearSurface(0);
  AdDraw.BeginScene;
  with AdDraw.Canvas do
  begin
    Font := AdDraw.Fonts.GenerateFont('Arial', 24, []);
    TextOut(0,0,'Andorra 2D...');
    Font := AdDraw.Fonts.GenerateFont('Arial', 10, []);
    TextOut(0,30,'...works with Lazarus too');
  end;
  AdDraw.EndScene;
  AdDraw.Flip;
  Done := false;
end;

initialization
  {$I Unit1.lrs}

end.
Woran könnte es liegen, dass die Initialisierung fehl geschlagen ist?
Muss ich noch irgendetwas in den Ordner kopieren, in dem meine .exe-Datei liegt?

Codewalker 20. Jul 2010 12:47

AW: Andorra 2D - graues Fenster
 
Bau doch mal statt der festen Meldung ein
Delphi-Quellcode:
ShowMessage(AdDraw.GetLastError);
in deine Routine ein. Dann bekommst du vielleicht einen etwas aussagekräftigeren Fehler.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz