AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal [Andorra] - Auf Events reagieren ?
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra] - Auf Events reagieren ?

Ein Thema von mimi · begonnen am 5. Jan 2009 · letzter Beitrag vom 17. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

[Andorra] - Auf Events reagieren ?

  Alt 5. Jan 2009, 18:14
Hallo,
Bei einem Projekt möchte ich gerne auf die Tastertur und Maus Events reagieren können. Jedoch klappt das einfach nicht zuverlässig. Selten klappt es. Dann eine Zeitlang überhaupt nicht.
Delphi-Quellcode:
    AdDraw.Window.Events.OnMouseDown:=MouseDown;
    AdDraw.Window.Events.OnKeyDown:=KeyDown;

procedure TPlSMC.KeyDown(Sender: TObject; Key: Word; Shift: TAdShiftState);
begin
  if key in [ord('0')..ord('9')] then begin
    AdObjTyp:=StrToint(chr(key));
    writeln(AdObjTyp);
  end;
end; // TPlSMC.KeyDown
Das ist die kurz Fassung. Ich arbeite mit Linux,
Lazarus 0.9.27, Debian, Lenny unter KDE

Kann mir jemand sagen was ich Falsch gemacht habe oder vergessen habe ? Danke !
Im Übrigen habe ich das mit AdDraw.Window.Events aus den Beispielen. Da klappt es auch nicht zuverlässig. Könnte ein Lazarus Problem sein bzw. ein Linux Problem. Wobei die Normalen Events klappen. Nur halt nicht in Andorra.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

Re: [Andorra] - Auf Events reagieren ?

  Alt 5. Jan 2009, 18:58
Hallo,

dieses Problem ist äußerst seltsam. Theoretisch müsste es in der AdVCLComponentEventConnector.pas liegen. Setze mal einen Haltepunkt in der Prozedur TAdVCLComponentEventConnector.KeyDown. Das ist die Stelle, an der die Events von VCL/LCL an die Andorra-Anwendung übergeben werden. Setze auch mal einen Haltepunkt auf die "ConnectEvents"- und die "DisconnectEvents"-Methode. Die sollten jeweils nur ein einziges Mal aufgerufen werden. Schau in der "ConnectEvents"-Methode auch ob "PropInfo" bei jeder Abfrage auf einen gültigen Wert gesetzt wird (der sich vom vorhergehenden unterscheidet).
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
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#3

Re: [Andorra] - Auf Events reagieren ?

  Alt 5. Jan 2009, 19:29
Tests haben ergeben das "ConnectEvents" zweimal aufgerufen wird.
Delphi-Quellcode:
 writeln('OK00');
    //Check for on key down event
    PropInfo := GetPropInfo(Control, 'OnKeyDown');
    if (FKeyDownComp = nil) and (PropInfo <> nil) then
    begin
      writeln('OK01');
      Method := GetMethodProp(Control, PropInfo);
      FOldKeyDown := TKeyEvent(Method);
      PKeyEvent(@Method.Code)^ := KeyDown; Method.Data := self;
      SetMethodProp(Control, PropInfo, Method);
      FKeyDownComp := Control;
    end;
Der Debugger geht bei mir leider nicht. Darum gehe ich diesen weg mit Writeln.
Beim ersten durchgang werden alle beide weriteln aufgerufen beim zweiten nicht mehr. Warum das so ist weiß ich noch nicht. Ich stelle weitere nach Forschungen an. Ich weiß allerdings das die Events vor einiger Zeit geklappt haben.

Edit01:
Das seltsame ist das die Procedure scheinbar zwei Mal aufgerufen wird. tue ich aber ein writeln am anfang der Procedure ConnectEvents erscheint die Meldung nur einmal. Erst wenn er bei onKeyDown ist. PropInfo scheint auch richtig gesetzt zu sein. Werde aber weiter Forschen.

Edit02: Habe übersehen das es sich um eine while schleife handelt. Also ist das verhalten hier richtig. Glaube ich.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#4

Re: [Andorra] - Auf Events reagieren ?

  Alt 6. Jan 2009, 23:25
Tritt das Problem eigentlich auch bei anderen auf ? Bisher konnte ich die Ursache noch nicht finde und habe auch aufgehört zu suchen.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [Andorra] - Auf Events reagieren ?

  Alt 6. Jan 2009, 23:54
Magst du mir mal das Projekt oder ein mini-projekt, das das Problem rekonstruiert schicken bzw. hier anhängen?
Das wäre sehr lieb, dann teste ich das mal.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#6

Re: [Andorra] - Auf Events reagieren ?

  Alt 7. Jan 2009, 17:40
Kann ich gerne machen. Aber ich glaube es dürfte ein allgemeiner Fehler sein.
Im Anhang findest du das Komplett Projekt. Die Grafiken sind NICHT von mir. Sie stammen von hier:
http://www.secretmaryo.org/
oder von einem Andorra Tutorial.

Hier mal ein Code-Auszug:
Delphi-Quellcode:
constructor TPlSMC.Create(aForm:TForm);
begin
  inherited Create;
  AdDraw :=TAdDraw.Create(aForm);
  AdDraw.DllName := '/media/sda6/Michael/daten/add_lazarus/ad2d_451_ALL/bin/AndorraOGLLaz.so';
  AdPerCounter:=TAdPerformanceCounter.Create;
  if AdDraw.Initialize then begin

    AdImageList := TAdImageList.Create(AdDraw);
    with AdImageList.Add('bricks') do begin
      Texture.LoadGraphicFromFile('image/bricks_sand.png',true,clFuchsia); // Dieses mal laden wir das Bild transparent herein
      PatternWidth := 64;
      PatternHeight := 64;
    end;
    AdImageList.Restore;

    AdSpriteEngine := TSpriteEngineEx.Create(nil);
    AdSpriteEngine.Surface := AdDraw;
    AdSpriteEngine.Zoom:=3;
    Application.OnIdle:=Idle;
    AdDraw.Window.Events.OnKeyDown:=KeyDown;
    AdDraw.Window.Events.OnMouseDown:=MouseDown;

  end
  else
  begin
    writeln(AdDraw.GetLastError);
    halt; //<-- Schließt die komplette Anwendung
  end;
end; // TPlSMC.Create
Wenn dann ist es ein Fehler in der reihenfolge.

Edit01 Es ist ein Lazarus Projekt 0.9.27 ich hoffe das läuft bei dir.
Angehängte Dateien
Dateityp: zip archiv_458.zip (199,8 KB, 3x aufgerufen)
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [Andorra] - Auf Events reagieren ?

  Alt 7. Jan 2009, 20:38
Das Projekt funktioniert hier Problemlos
mit Lazarus 2.6.27, FPC 2.3.1, Andorra aktuelle CVS.
Hast du es auch mal mit der aktuellen CVS-Version probiert?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#8

Re: [Andorra] - Auf Events reagieren ?

  Alt 7. Jan 2009, 22:28
Zitat:
Lazarus 2.6.27
du meinst wahrscheinlich 0.9.27

Zitat:
Hast du es auch mal mit der aktuellen CVS-Version probiert?
Ich glaube noch nicht. Werde ich nachholen. Welche Andorra Version hast du denn genau ? Ich habe inzwischen die "ad2d_451_ALL"

Erstmal danke für deine Tests also muss es an meine Andorra Version liegen.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [Andorra] - Auf Events reagieren ?

  Alt 8. Jan 2009, 19:12
mein ich doch
Ich habe die aktuelle CVS-Version
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

Re: [Andorra] - Auf Events reagieren ?

  Alt 8. Jan 2009, 19:34
Seit Version 0.4.5.1 habe ich allerdings nicht an der Eventbehandlung geändert.
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
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:16 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