![]() |
Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Hallo,
folgendes Problem, ich erstelle dynamisch Komponenten und ihnen Proceduren zuweisen. Leider läuft das schief. Hat einer ne Idee? so sieht mein Code (gekürzt) aus:
Delphi-Quellcode:
MfG
unit NewTab;
uses ...; procedure NeuerTab; procedure VST_Edit_OnGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; var anzSQL:Integer = 0; VST_Edit: array of TVirtualStringTree; Sheet : array of TTabSheet; procedure NeuerTab; begin SetLength(Sheet, anzSQL +1); SetLength(VST_Edit, anzSQL +1); Sheet[anzSQL]:=TTabSheet.Create(Form_Main.PageControl_NewTab); Sheet[anzSQL].Parent:=Form_Main.PageControl_NewTab; Sheet[anzSQL].PageControl:=Form_Main.PageControl_NewTab; Sheet[anzSQL].Caption:='Query '+ IntToStr(Form_Main.PageControl_NewTab.PageCount -1); VST_Edit[anzSQL]:=TVirtualStringTree.Create(Sheet[anzSQL]); VST_Edit[anzSQL].Parent:=Sheet[anzSQL]; with VST_Edit[anzSQL] do begin Align:=alClient; BorderStyle:=bsNone; Header.Background:=clSkyBlue; Header.Style:=hsFlatButtons; Header.Options:=[hoColumnResize,hoDblClickResize,hoDrag,hoVisible]; TreeOptions.PaintOptions:=[toShowButtons, toShowDropmark, toShowHorzGridLines, toShowTreeLines, toShowVertGridLines, toThemeAware, toUseBlendedImages, toFullVertGridLines]; TreeOptions.SelectionOptions:=[toFullRowSelect]; Name:=NamePrefixVST + IntToStr(anzSQL); OnGetText:=VST_Edit_OnGetText; //GEHT NICHT end; inc(anzSQL); end; schuetze09 [edit=sakura] Leerzeichen in den Quelltext eingelassen. Mfg, sakura[/edit] |
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
versuch das ganze mal mit nem @ davor...
|
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
habe ich auch schon probert, dann kommt:
"Inkompatible Typen: TVSTGetTextEvent und Pointer" |
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Methoden und Funktionen sind auch immer inkompatibel.
Methoden haben einen zusaetzlichen Parameter Self. Nein es geht nicht den einer Funkton zu verpassen. Mal ueber "of object" in der Hilfe nachlesen. |
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
@Robert Marquardt: dann werde ich wohl lesen müssen
Ich hatte gedacht, es gibt dafür eine schnelle kleine Lösung )-: MfG schuetze09 |
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Moin Schuetze09,
Zitat:
Hättest Du die Überschrift mal in der Suche eingegeben, wärst Du vermutlich auf einige Threads mit dem gleichen Thema gestossen ;-) BTW: Kurze und schnelle Lösung: Mach, wie Dir die Fehlermeldung fast schon vorschlägt, aus der Prozedur eine Methode (z.B. auch vom Formular). |
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Eine Möglichkeit gibts noch:
Code:
Mfg
procedure FormClick(Self: TForm; Sender: TObject);
begin ShowMessage('OK'); end; procedure TForm1.FormCreate(Sender: TObject); var Event: TNotifyEvent; begin with TMethod(Event) do begin Code:=@FormClick; Data:=Self; end; Self.OnClick:=Event; // geht ! end; Phantom1 |
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Moin!
Ja, super, und? Nun haste da was hingefakt. Super! - aber was ist, wenn du kein Self hast, weil du keine Klasse hast? Warum nutzt du keine Methode von TForm1, wenn du es schon darin alles aufbaust und zuweist? Fragen über Fragen.... Das ist doch auch nur ein Hack mit TMethod - warum nicht gleich eine kleine Klasse mit statischen Methoden? Die kann man zuweisen und die Klasse muss noch nichtmal angelegt werden... MfG Muetze1 |
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Hallo,
ich habe es jetzt wie folgt gemacht, gefällt mir zwar nicht so, aber es geht: in meiner MainForm habe ich
Delphi-Quellcode:
unter public deklariert. So kann ich dann in meiner NewTab-Unit die procedure dem Event OnGetText zuordnen.
procedure VST_Edit_OnGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Nicht schön, aber es geht. Eigentlich müssten die proceduren in die NewTab-Unit, da ja dort die Komponenten dynamisch erstellt werden und vom rein logischen Zusammenhang her müssten sie da drin stehen. MfG schuetze09 |
Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Du könntest dir in NewTab auch eine Hilfsklasse schreiben in der du die Funktion packen kannst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 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