Macht mir keine Vorwürfe ich kann kein Delphi und will es auch nicht lernen.
Folgendes Problem - in vereinfachter Syntax (TCanvas ist ein Unterobjekt von TImage, ein Standardelemetn des Forumlars zur implemtierung von Zeichenflächen).
class TTest{ p1: ^TCanvas; TTest( const desktop: TCanvas ); f1( ); }
Der CF geht folgendermaßen (i_main ist eine besagte Zeichenfläche):
var t1: TTest;
[...]
TTest.TTest( const dektop: TCanvas ){ p1 := @desktop }
TTest.f1( ){ p1^.Ellipse( 0,0,10,10 ) }
[...]
t1 := TTest.TTest( i_main.TCanvas );
t1.f1( );
Als Ergebnis stürz das Programm beim Versuch p1^.Ellipse auszuführen ab. ASM:
call dword ptr [edx+$10]
Ich habe einige Vermutungen wobei es aber nichts bringen würde die zu erläutern. Ich habe auch schon versucht die Ellipse-Funktion selbst zu refernzieren, weiss aber nicht wie ein Zeiger auf eine Funktion zu verwirklichen ist.
EDIT:
Es geht wenn ich TImage (Elternobject von TCanvas) referenziere. Warum aber kann ich nicht auf TCanvas direkt zeigen ?
En plus:
Wie kann ich als Funktionsparameter einen Zeiger eigenen Typs übergeben ohne erst eine eigene Zeigerklasse auf den Typ zu adaptieren ?
procedure f2( p1: ^TTest );
geht nicht
EDIT:
Folgendes Problem. In einem Array Typ TSnowflake existieren verschiede Elemente. Ich habe folgende Funktionen für die Matrix gemacht:
function m_pop( );
var tcnt_TSnowflake
begin
tcnt_TSnowflake := matrix[ Length( matrix ) - 1 ];
matrix[ Length( matrix ) - 1 ].Destroy( );
setLength( matrix,Length( matrix ) - 1 );
Result := tcnt_TSnowflake;
end;
Aus einer anderen Funktion herraus gibt m_pop( ) richtige Ergebnisse zurück. Auch der Befehl:
matrix[ 0 ] := TSnowflake.TSnowflake( ) //bzw .Create( )
setzt das erste Elem. des Arrays auf korrekte Werte.
Jedoch resultiert aus
matrix[ 0 ] := matrix[ Length( matrix ) - 1 ];
oder
matrix[ 0 ] := m_pop( );
eine Leerstelle an matrix[ 0 ]. Warum ?
Willkommen im #Neuland
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.
PQ Discord Server: #planetquake Spenden? Hier entlang!
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.
PQ Discord Server: #planetquake Spenden? Hier entlang!