![]() |
[Andorra2d]: keine Form-Events?
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:
MfG,
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. Eugen |
Re: [Andorra2d]: keine Form-Events?
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 |
Re: [Andorra2d]: keine Form-Events?
Die Ereignisse sind der Form1 zugewiesen. Aber es funktioniert leider nicht :(
|
Re: [Andorra2d]: keine Form-Events?
Werden die Ereignisse nicht ausgeführt oder ist Selected = nil ?
|
Re: [Andorra2d]: keine Form-Events?
Werden nicht ausgeführt habe auch noch versucht bei MouseDown ein ShowMessage anzuzeigen aber wurde nicht ausgeführt
|
Re: [Andorra2d]: keine Form-Events?
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:
Delphi-Quellcode:
Eventuell musst du die Parameterliste noch ein wenig anpassen: Du musst dir die Deklaration des entsprechenden Events in der Unit "AdEvents" betrachten.
AdDraw.Window.Events.OnMouseMove := FormMouseMove;
|
Re: [Andorra2d]: keine Form-Events?
Zitat:
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?^^ |
Re: [Andorra2d]: keine Form-Events?
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 |
Re: [Andorra2d]: keine Form-Events?
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.
|
Re: [Andorra2d]: keine Form-Events?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
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.
if FControl.Owner is TForm then
FForm := TForm(FControl.Owner) else exit; 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:
Also zusammengefasst:
AdDraw.Window.Events.OnMouseDown:=@FormMouseDown;
AdDraw.Window.Events.OnMouseMove:=@FormMouseMove; AdDraw.Window.Events.OnMouseUp:=@FormMouseUp; 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr. |
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-2025 by Thomas Breitkreuz