Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Komponente und Ereignis in unit auslagern (https://www.delphipraxis.net/46324-komponente-und-ereignis-unit-auslagern.html)

soeschmid 22. Mai 2005 21:21

Delphi-Version: 7

Komponente und Ereignis in unit auslagern
 
Hallo

Ich arbeite an einem größeren Programm, bei dem ich zur Übersicht
Komponenten sowie Ereignisprozeduren in units auslagern möchte.

Leider bekomme ich immer beim Beenden der dynamisch zugewiesenen Prozedur eine Zugriffsverletzung.

Der Quelltext im einzelnen:

Delphi-Quellcode:
unit5;
interface
uses
   ....
procedure start11();
procedure mouseup(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

implementation

procedure start11();
begin
  bild := Timage.Create(Form2);
  bild.parent := Form2;
  @bild.onmouseup := @mouseup;
end;

procedure mouseup(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  //irgendwas (Berechnungen ohne an irgendwelchen Komponenten Änderungen vorzunehmen)
end;
Beim Beenden der Prozedur "mouseup" tritt immer eine Zugriffsverletzung auf, unabhängig vom Quelltext.
(Wenn im debugger das "end;" markiert ist und ich wieder auf "F7" drücke.)

Wenn ich als Ereignis nicht das onmouseup-Ereignis, sondern das Onclick-Ereignis benutze gibt es keine Fehlermeldungen.
Leider brauche ich für die Berechnungen die mauskoordinaten.

Kann mir jemand helfen?

Mfg
Soeschmid

Bernhard Geyer 22. Mai 2005 21:43

Re: Komponente und Ereignis in unit auslagern
 
Du darfst der bild.onmouseup-Ereignis nur eine Objektmethode zuweisen, sprich eine Methode eines Objekts.
Du weißt ihr aber per harten (fehlerhaften) Pointeroperationen eine normale Funktion zu!

So könntest du die Ereignisse auslagern (Alternativ du definierst eine eigene Basis-Formularklasse, welche schon einige Zusatzfunktionen besitzt):

Delphi-Quellcode:
type
  TMyObj = class(TObject);
  private
    bild: TImage;

    procedure mouseup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  public
    procedure start11(ParentForm: TForm);
  end;

implementation

procedure TMyObj.start11(ParentForm: TForm);
begin
  bild := Timage.Create(self);
  bild.parent := ParentForm;
  bild.onmouseup := mouseup;
end;

procedure TMyObj.mouseup(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  //irgendwas (Berechnungen ohne an irgendwelchen Komponenten Änderungen vorzunehmen)
end;
So könntest Du

DP-Maintenance 22. Mai 2005 21:51

DP-Maintenance
 
Dieses Thema wurde von "MrSpock" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Ankündigungen" verschoben.
Ist kein Beitrag zur Code - Lib.

DP-Maintenance 22. Mai 2005 22:33

DP-Maintenance
 
Dieses Thema wurde von "Luckie" von "Ankündigungen" nach "Object-Pascal / Delphi-Language" verschoben.
MrSpock war wohl gerade wieder als Waffensystemoffizier mit seiner Phantom unterwegs und hat wohl im Vorbeiflug nicht richtig gezielt. :mrgreen:
An nach Delphi.

soeschmid 22. Mai 2005 23:10

Re: Komponente und Ereignis in unit auslagern
 
Vielen Dank

So verstehe ich auch, warum das nicht funktioniert hat.

Mfg
Soeschmid


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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