Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 07:53

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OnDblClick zuweisen
BeitragVerfasst: Mo Jan 07, 2008 02:33 
Offline
DGL Member

Registriert: Sa Jan 13, 2007 18:39
Beiträge: 15
guten tag :)
ich habe folgendes problem:

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 :D
(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..

vielen dank schon mal :roll:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 07, 2008 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hast du vielleicht nur als Typ Procedure, also
Code:
  1. OnDblClick : Procedure;

statt
Code:
  1. OnDblClick : Procedure of Object;

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.

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 07, 2008 12:21 
Offline
DGL Member
Benutzeravatar

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:
  1. TCallbackProc = procedure; // allgemein
  2. TCallbackClassProc = procedure of object; // 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:
  1.  
  2. var MyCallback: TCallbackProc;
  3.  
  4. procedure Foo;
  5. begin
  6. // viel Code
  7. end;
  8.  
  9. // irgendwo anders
  10. MyCallback := Foo;


oder wirklich zu einer Klasse gehören, zB.
Code:
  1.  
  2. type
  3.   TMyClass = class
  4.     procedure Bar;
  5.   end;
  6.  
  7. var
  8.   MyClass: TMyClass;
  9.   MyClassCallback: TCallbackClassProc;
  10.  
  11. procedure TMyClass.Bar;
  12. begin
  13. // viel Code
  14. end;
  15.  
  16. // irgendwo anders, MyClass ist instanziert
  17. 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:
Code:
  1. TNotifyEvent = procedure(Sender: TObject) of object;

Damit sollte alles klar sein ;)

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 07, 2008 23:41 
Offline
DGL Member

Registriert: Sa Jan 13, 2007 18:39
Beiträge: 15
vielen dank, jetzt funktioniert es :D
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 :oops:
danke sehr auf jeden fall, das hat sehr geholfen :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]