ich habe eine unit erstellt, in der ich mehrere typen definiert habe..
dabei handelt es sich um TGalaxy, TSystem und TPlanet, also TSystem ist ein Array von TPlanet und TGalaxy ist ein Array von TSystem
(jede galaxy kann beliebig viele Systeme enthalten, jedes system kann zwischen 0 und 3 planeten enthalten)
jetzt habe ich prozeduren geschrieben, die die galaxy (mit systemen und planeten) dynamisch beim start des programms erstellen, nach verschiedenen aspekten wie galaxytyp(normalgalaxy, spiralgalaxy usw) oder seltenheit bestimmter systeme/planeten was mir ermöglicht, hunderte zeilen quelltext aus dem hauptformular auszulagern, indem ich für die erstellung der galaxy nur 2 zeilen quelltext brauche (selbiges ist noch für forschung, spionage, flotten, usw.. geplant)
es funktioniert soweit auch sehr gut.. aber jetzt meine frage..
nach dem erstellen der galaxy will ich, dass die systeme ein DblClickEvent haben, das über ein parameter ActiveSys(also den Tag des ausgewählten bildes) in einem neuen clientformular das ausgewählte system anzeigt..
leider kommt wenn ich in der anderen unit bei der erstellung der TImages ein OnDblClick(alternativ auch OnClick, wird aber eigendlich für etwas anderes benötigt) zuweisen will folgende meldung des compilers: "Inkomplatible Typen: 'Methodenzeiger und Reguläre Prozedur' "
das merkwürdige ist, wenn ich die Images erstellen und OnDblClick im hauptformular zuweisen würde, würde es funktionieren, aber das soll eigendlich nicht, weil ich gerade eine auslagerung des quelltextes vornehmen möchte, um das hauptformular übersichtlicher zu gestalten
es wäre super, wenn jemand mir jemand helfen könnte wenn code benötigt wird, poste ich ihn, allerdings ist er ~250 zeilen lang, deswegen wäre eine genauere eingrenzung hilfreich..
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Hast du vielleicht nur als Typ Procedure, also
Code:
OnDblClick :Procedure;
statt
Code:
OnDblClick :ProcedureofObject;
oder andersherum.
Kann sein, dass es daran irgendwie liegt. Ich meine den Fehler auch mal bei so was bekommen zu haben...
Ansonsten verstehe ich dein Problem nicht so ganz, sorry. Aber vllt hilft dir das ja schon etwas.
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Des Lösungs Rätsel ist relativ simpel:
Wenn du dynamisch eine Prozedur zuweisen willst, kannst du das entweder mit einer allgemeinen Prozedur oder mit der Prozedur als Teil einer Klasse tun.
So schriebe sich das als
Code:
TCallbackProc =procedure;// allgemein
TCallbackClassProc =procedureofobject;// Prozedur einer Klasse
Man kann dann jeweils nur Prozeduren (oder natürlich auch Funktionen, je nach Definition) zuweisen, die wirklich nicht zu einer Klasse gehören, zB.
Code:
var MyCallback: TCallbackProc;
procedure Foo;
begin
// viel Code
end;
// irgendwo anders
MyCallback := Foo;
oder wirklich zu einer Klasse gehören, zB.
Code:
type
TMyClass =class
procedure Bar;
end;
var
MyClass: TMyClass;
MyClassCallback: TCallbackClassProc;
procedure TMyClass.Bar;
begin
// viel Code
end;
// irgendwo anders, MyClass ist instanziert
MyClassCallback := MyClass.Bar;
Versucht man es trotzdem anders, bekommt man deine Fehlermeldung.
Nun ist TControl.OnDblClick (in OnDblClick im OI klicken + F1) vom Typ TNotifyEvent und das ist so deklariert:
vielen dank, jetzt funktioniert es ich hab blos ein paar stunden lang gedacht, dass er nicht in die prozedur reinkommt, weil er etwas unsichtbar machen sollte, bis ich gemerkt habe, das ich visible:=true eingegeben habe danke sehr auf jeden fall, das hat sehr geholfen
Mitglieder in diesem Forum: Bing [Bot] und 19 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.