Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Inkompatible Typen: Methodenzeiger und reguläre Prozedur (https://www.delphipraxis.net/44160-inkompatible-typen-methodenzeiger-und-regulaere-prozedur.html)

schuetze09 14. Apr 2005 14:44


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:
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;
MfG
schuetze09

[edit=sakura] Leerzeichen in den Quelltext eingelassen. Mfg, sakura[/edit]

glkgereon 14. Apr 2005 14:54

Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
 
versuch das ganze mal mit nem @ davor...

schuetze09 14. Apr 2005 15:00

Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
 
habe ich auch schon probert, dann kommt:
"Inkompatible Typen: TVSTGetTextEvent und Pointer"

Robert Marquardt 14. Apr 2005 15:05

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.

schuetze09 14. Apr 2005 15:08

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

Christian Seehase 14. Apr 2005 16:41

Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
 
Moin Schuetze09,

Zitat:

Zitat von schuetze09
Ich hatte gedacht, es gibt dafür eine schnelle kleine Lösung )-:

gibt's.

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).

Phantom1 14. Apr 2005 20:52

Re: Inkompatible Typen: Methodenzeiger und reguläre Prozedur
 
Eine Möglichkeit gibts noch:
Code:
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;
Mfg
Phantom1

Muetze1 15. Apr 2005 00:18

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

schuetze09 15. Apr 2005 06:01

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:
procedure VST_Edit_OnGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
unter public deklariert. So kann ich dann in meiner NewTab-Unit die procedure dem Event OnGetText zuordnen.

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

jim_raynor 15. Apr 2005 06:04

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.
Seite 1 von 2  1 2      

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