AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia [Andorra2d]: keine Form-Events?
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra2d]: keine Form-Events?

Ein Thema von EugenB · begonnen am 12. Mai 2008 · letzter Beitrag vom 14. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
EugenB

Registriert seit: 7. Dez 2006
98 Beiträge
 
Lazarus
 
#1

[Andorra2d]: keine Form-Events?

  Alt 12. Mai 2008, 07:59
Hey Leute,

ich fange grade an mich in Andorra einzuarbeiten, aber ich komme nicht weiter ^^, die MouseEvents werden nicht ausgeführt.

Habe die Version 0.35.

In den Demos: BreakOut, Physics oder auch PixelCheck werden anscheinend die Events ausgeführt ( habe diese noch nicht versucht zu compilieren), aber habe mir den Code von zb Physics 1 zu 1 kopiert, doch es wird nicht ausgeführt

Gehen diese Events bei Lazarus/Freepascal nicht? Oder fehlt irgendeine Einstellung die ich übersehen habe?

Hier ist mein Quellcode (falls nötig ^^):
Delphi-Quellcode:
unit umainengine;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  AdDraws, AdClasses, AdTypes, ExtCtrls, AdPerformanceCounter,AdSprites,
  ComCtrls, AdEvents;

type

  { TKarte }
  TFigur = class(TImageSprite)
     public
       constructor Create(AParent:TSprite);override;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

  private
    { private declarations }
  public
    { public declarations }
    AdDraw:TAdDraw;
    AdImageList: TAdImageList;
    AdPerCounter:TAdPerformanceCounter;
    AdSpriteEngine:TSpriteEngine;
    Selected:TSprite;
    Figur: TFigur;
    dx,dy:integer;
    procedure Idle(Sender: TObject; var Done: boolean);
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);

begin
  AdPerCounter := TAdPerformanceCounter.Create;

  AdDraw := TAdDraw.Create(Self);
  AdDraw.DllName := 'AndorraOGLLaz.dll';
  //AdDraw.Window.Events.OnMouseDown:=@FormMouseDown;

  Application.OnIdle := @Idle;
  AdDraw.Initialize;
  
  AdImageList := TAdImageList.Create(AdDraw);
  AdImageList.LoadFromFile('karten.ail');
  
  AdSpriteEngine := TSpriteEngine.Create(AdDraw);
  //AdSpriteEngine.Surface := AdDraw;
  
  Figur := TFigur.Create(AdSpriteEngine);
  with Figur do
  begin
     //Dem ImageSprite ein Bild zuweisen
     Image := AdImageList.Find('caro_2');
     //Die Animation aktiv schalten
     AnimActive := true;
     //Die Animation soll sich ständig wiederholen
     AnimLoop := true;
     //Die Animation soll mit 15 FPS abgespielt werden
     AnimSpeed := 15;
     
     PixelCheck:=true;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  AdImageList.Free;
  AdSpriteEngine.Free;
  AdPerCounter.Free;
  //AdDraw.Free;
end;

//Mouse events for moving the elements
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Selected := AdSpriteEngine.GetSpriteAt(X,Y);
  if (Selected <> nil) then
  begin
    dx := round(Selected.WorldX - X);
    dy := round(Selected.WorldY - Y);
    //TPhysicalSprite(Selected).ActivateNeighbours;
    //TPhysicalSprite(Selected).Active := false;
  end
  else
  begin
    Selected := nil;
  end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Selected <> nil then
  begin
    Selected.X := X + dx;
    Selected.Y := Y + dy;
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Selected <> nil then
  begin
    //TPhysicalSprite(Selected).Active := true;
  end;
  Selected := nil;
end;



procedure TForm1.Idle(Sender: TObject; var Done:boolean);
begin
  AdDraw.ClearSurface(clBlack);
  AdDraw.BeginScene;
  with AdDraw.Canvas do
  begin
    AdPerCounter.Calculate;
    Caption := 'FPS:'+inttostr(AdPerCounter.FPS);

    Font := AdDraw.Fonts.GenerateFont('Arial', 24, []);
    TextOut(0,0,'Andorra 2D...');
    Font := AdDraw.Fonts.GenerateFont('Arial', 10, []);
    TextOut(0,30,'...works with Lazarus too');
    
    //AdImageList.Find('caro_2').Draw(AdDraw,50,50,0);
  end;
  AdSpriteEngine.Move(AdPerCounter.TimeGap / 1000);
  AdSpriteEngine.Draw;
  //Alle als mit "Dead" als "tot" makierten Sprites löschen
  AdSpriteEngine.Dead;
  
  AdDraw.EndScene;
  AdDraw.Flip;
  
  Done := False;
end;

{ TFigur }

constructor TFigur.Create(AParent: TSprite);
begin
  inherited;
  //Am Punkt (0;0) starten.
  X := 0;
  Y := 0;

  //XSpeed auf -150 setzten
  XSpeed := -150;
end;

initialization
  {$I umainengine.lrs}

end.
MfG,
Eugen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: [Andorra2d]: keine Form-Events?

  Alt 12. Mai 2008, 08:28
Hallo Eugen!

Hast du den Code komplett (auch die Prozeduren/Deklarationen) kopiert oder hast du die Ereignisse über den Objektinspektor (Reiter: Ereignisse) angelegt?

Falls du alles nur kopiert hast, musst du im Objektinspektor im genannten Reiter aus den jeweiligen DropDpwn-Boxen die Ereignisse noch den Komponenten zuweisen.

Grüße, Matze
  Mit Zitat antworten Zitat
EugenB

Registriert seit: 7. Dez 2006
98 Beiträge
 
Lazarus
 
#3

Re: [Andorra2d]: keine Form-Events?

  Alt 12. Mai 2008, 09:02
Die Ereignisse sind der Form1 zugewiesen. Aber es funktioniert leider nicht
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: [Andorra2d]: keine Form-Events?

  Alt 12. Mai 2008, 09:12
Werden die Ereignisse nicht ausgeführt oder ist Selected = nil ?
Thomas
  Mit Zitat antworten Zitat
EugenB

Registriert seit: 7. Dez 2006
98 Beiträge
 
Lazarus
 
#5

Re: [Andorra2d]: keine Form-Events?

  Alt 12. Mai 2008, 09:15
Werden nicht ausgeführt habe auch noch versucht bei MouseDown ein ShowMessage anzuzeigen aber wurde nicht ausgeführt
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

Re: [Andorra2d]: keine Form-Events?

  Alt 12. Mai 2008, 10:29
Hm,

ehrlich gesagt habe ich das noch gar nicht ausprobiert.

Beim Initialisieren von Andorra 2D schleife ich die Events nämlich über AdDraw.Window.Events. Versuche eine Methoden mal damit "per Hand" zu verknüpfen. Also:
AdDraw.Window.Events.OnMouseMove := FormMouseMove; Eventuell musst du die Parameterliste noch ein wenig anpassen: Du musst dir die Deklaration des entsprechenden Events in der Unit "AdEvents" betrachten.
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
EugenB

Registriert seit: 7. Dez 2006
98 Beiträge
 
Lazarus
 
#7

Re: [Andorra2d]: keine Form-Events?

  Alt 12. Mai 2008, 13:38
Zitat von igel457:
Hm,

ehrlich gesagt habe ich das noch gar nicht ausprobiert.

Beim Initialisieren von Andorra 2D schleife ich die Events nämlich über AdDraw.Window.Events. Versuche eine Methoden mal damit "per Hand" zu verknüpfen. Also:
AdDraw.Window.Events.OnMouseMove := FormMouseMove; Eventuell musst du die Parameterliste noch ein wenig anpassen: Du musst dir die Deklaration des entsprechenden Events in der Unit "AdEvents" betrachten.
Das wollte ich auch schon mal versuchen aber sofort beim Zuweisen des Events bekomme ich eine Zugriffsverletzung

Edit:
So habe die Physics-Demo unter Lazarus zum laufen bekommen, ABER die MouseEvents werden nicht berücksichtigt.

Hat schon jemand es geschafft unter Lazarus irgendwelche MouseEvents zumlaufen zubekommen?^^
  Mit Zitat antworten Zitat
EugenB

Registriert seit: 7. Dez 2006
98 Beiträge
 
Lazarus
 
#8

Re: [Andorra2d]: keine Form-Events?

  Alt 13. Mai 2008, 00:14
So

konnte diese Events jetzt so zugewiesen:
AdDraw.Window.Events.OnMouseMove := FormMouseMove; usw

Jedoch werden diese nicht ausgeführt

Also ist es wohl eher ein Bug welcher nur bei FreePascal auftaucht , schade hab mich gefreut bissel mit Andorra zuarbeiten^^ naja hoffe es wird in den nächsten Versionen korigiert
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

Re: [Andorra2d]: keine Form-Events?

  Alt 13. Mai 2008, 14:22
Gehe das Programm doch einfach mal mit dem Debugger Schritt für Schritt durch und schaue ob innerhalb der Zuweisung der Events (in TAdLCLOGLComponentWindow.SetupEvents) irgendwo ein Fehler auftritt.
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
EugenB

Registriert seit: 7. Dez 2006
98 Beiträge
 
Lazarus
 
#10

Re: [Andorra2d]: keine Form-Events?

  Alt 13. Mai 2008, 17:37
Zitat von igel457:
Gehe das Programm doch einfach mal mit dem Debugger Schritt für Schritt durch und schaue ob innerhalb der Zuweisung der Events (in TAdLCLOGLComponentWindow.SetupEvents) irgendwo ein Fehler auftritt.
Hab ich gemacht, doch leider wird die Funktion nicht bis zu ende ausgeführt, weil ...

Delphi-Quellcode:
if FControl.Owner is TForm then
    FForm := TForm(FControl.Owner)
  else
    exit;
wegen diesen 4 Zeilen wird die Funktion sofort beendet. Nun gut also hab ich mal die erste und die letzten beiden auskommentiert. Beim durchlaufen der Funktion kamen keine Fehler.

Immernoch kein MouseEvent. Dann hab ich mir die Funktion TAdLCLOGLComponentWindow.MouseDown angeschaut und diese auch beim Debuggen durchgegangen. Das Ergebnis war es wurde kein Event Zugewiesen, obwohl bei der SetupEvents keine Fehler auftraten. Nun gut habe ich mal wieder versucht die Events per Hand zuzuweisen und tada der MouseEvent wurde ausgeführt jippiee ^^

Delphi-Quellcode:
AdDraw.Window.Events.OnMouseDown:=@FormMouseDown;
  AdDraw.Window.Events.OnMouseMove:=@FormMouseMove;
  AdDraw.Window.Events.OnMouseUp:=@FormMouseUp;
Also zusammengefasst:
Da die Funktion TAdLCLOGLComponentWindow.SetupEvents sofort beendet wird, können keine Events dem FContext zugewiesen werden und somit auch keine externen Zuweisungen.

Die Events der Form werden nicht in die AdDraw.Window.Events übernommen. Und da wäre auch der Fehler ^^.

Bei TAdVCLComponentWindow.SetupEvents werden anscheinend die Events übernommen, aber diese habe ich noch nicht probiert zu compilieren.

Naja wie auch immer, es funktioniert wenn man die 3 Zeilen (s.o) auskommentiert und die Events per Hand zuweist.

Ich hätte noch einen Lösungsvorschlag für die TAdLCLOGLComponentWindow-Klasse.

Man muss keine Events per AdDraw.Window.Events hinzufügen, die Events der Form werden sofort von der TAdLCLOGLComponentWindow-Klasse aus aufgerufen. Bisher nur OnMouseDown/Move/Up bearbeitet.

Siehe Anhang.

Und schon funktionieren Events unter Lazarus / Freepascal.

Bleibt nurnoch der Fehler mit dem AdDraw.Free^^.

MfG,
Eugen
Angehängte Dateien
Dateityp: pas adlcloglcomponentwindow_287.pas (10,0 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:05 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