AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Neues On... Ereignis zuweisen

Ein Thema von alleinherrscher · begonnen am 24. Mai 2006 · letzter Beitrag vom 22. Dez 2009
Antwort Antwort
Benutzerbild von igel457
igel457

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

Re: Neues On... Ereignis zuweisen

  Alt 22. Dez 2009, 21:14
@Button.OnClick:=@MeineProcedur; Das sollte so zwar Compilieren - funktionieren sollte es jedoch nicht einwandfrei.

Ein Methodenzeiger (also das, worauf OnClick normalerweise zeigt) ist normalerweise so aufgebaut:
Delphi-Quellcode:
type
  TMethod = record
    Code: Pointer;
    Data: Pointer;
  end;
  PMethod = ^TMethod;
"Code" spezifiziert hierbei die Codestelle der Prozedur, "Data" die Instanz der Klasse. Jede Methode einer Klasse kann man sich im Prinzip wie eine normale Prozedur mit einem zusätzlichen Parameter "self" vorstellen:

Dieser Code...
Delphi-Quellcode:
type
  TMyClass = class
    value: integer;
    procedure Test;
  end;

[...]
procedure TMyClass.Test;
begin
  Writeln(value);
end;
...ist vom Prinzip her das selbe wie...
Delphi-Quellcode:
type
  TMyClass = record
    value: integer;
  end;
  PMyClass = ^TMyClass;

procedure TMyClass_Test(self: Pointer);
begin
  Writeln(PMyClass(self)^.value);
end;
Wenn du nun den Methodenzeiger wie von dir gezeigt einfach so überschreibst, können da die tollsten Sachen passieren, da "Data" in ein Register geschrieben wird, welches eigentlich für einen Parameter gedacht ist (Angabe ohne Gewähr, ich kann mir das nur so vorstellen, überprüft habe ich es nicht). Außerdem wird für "Data" irgendein Wert angenommen, da ein normaler Funktionszeiger ja nur 4 Byte und nicht 8 Byte wie ein Methodenzeiger breit ist.

Ich hoffe das dies die Sache etwas klarer macht,
Andreas
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

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:55 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