Kezdőoldal » Számítástechnika » Programozás » Mi a hiba? Delphiben futásidőb...

Mi a hiba? Delphiben futásidőben létrehozott gombhalmaz Onclick eseményére a következő hibát adja: [Error] szinkip. Pas (723) : Incompatible types: method pointer and regular procedure

Figyelt kérdés
Mi a rossz? A procedure létezik, létrehoztam. Máskor sikerült, most az istennek sem akarja.
2016. júl. 21. 10:39
1 2
 1/16 SimkoL ***** válasza:
Kódot mutass !
2016. júl. 21. 12:41
Hasznos számodra ez a válasz?
 2/16 SimkoL ***** válasza:

unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;


type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

private

ButtonArray : array[1..10] of TButton;

public

procedure ButtonClick(Sender: TObject);

end;


var Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.ButtonClick(Sender: TObject);

begin

ShowMessage('Rendben !');

end;


procedure TForm1.FormCreate(Sender: TObject);

var i : Integer;

begin

for i := 1 to 10 do

begin

ButtonArray[i] := TButton.Create(self);

with ButtonArray[i] do

begin

Left := 10;

Top := i * 25;

Height := 22;

Caption := 'Gomb ' + IntTostr(i);

Parent := Form1;

onClick := ButtonClick;

end;

end;

end;


end.

2016. júl. 21. 13:30
Hasznos számodra ez a válasz?
 3/16 A kérdező kommentje:

Ez a létrehozás:


for a:=1 to 9 do

begin {9 törlő gomb generálása}

torlogomb[a]:=TBitbtn.Create(self);

with torlogomb[a] do

begin {közös tulajdonságok}

Parent:=Form1;

width:=26;Height:=28;

Left:=250;Top:=a*30-25;

Font.Color:=ClRed;

Font.Style:=[];

caption:='X';

ShowHint:=True;

Hint:=IntToStr(a)+'. cél törlése';

SendToBack;

tag:=a;

onclick:=celtorles;

end;

end;


A procedure még üres:


procedure celtorles(Sender: TObject);

begin


end;


Mindig így csinálom, rengeteg más programom van, abban is ugyanígy van, ott műxik, itt nem. Felrobbantom.

2016. júl. 21. 23:20
 4/16 SimkoL ***** válasza:

Az onClick az TNotifyEvent ami:

type TNotifyEvent = procedure(Sender: TObject) of object;

tehát nem lehet 'mezei' eljárás. Ezért kell berakni a TForm1 osztályba, mint ahogy én is tettem a példában.


unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons;


type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

private

public

torlogomb : array[1..9] of TBitBtn;

procedure celtorles(Sender: TObject);

end;


var

Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.celtorles(Sender: TObject);

begin

ShowMessage('Rendben');

end;


procedure TForm1.FormCreate(Sender: TObject);

var a : Integer;

begin

for a := 1 to 9 do

begin {9 törlő gomb generálása}

torlogomb[a] := TBitbtn.Create(self);

with torlogomb[a] do

begin {közös tulajdonságok}

Parent := Form1;

Width := 26;

Height := 28;

Left := 250;

Top := a * 30 - 25;

Font.Color := clRed;

Font.Style := [];

Caption := 'X';

ShowHint := True;

Hint := IntToStr(a) + '. cél törlése';

SendToBack;

Tag := a;

onClick := celtorles;

end;

end;

end;


end.

2016. júl. 22. 05:06
Hasznos számodra ez a válasz?
 5/16 A kérdező kommentje:

Betettem. Erre ezt adja:


[Error] szinkip.pas(92): Unsatisfied forward or external declaration: 'TForm1.celtorles'

2016. júl. 22. 08:49
 6/16 A kérdező kommentje:
Tettem a private-va,a public-ba, ugyanaz.
2016. júl. 22. 08:51
 7/16 SimkoL ***** válasza:
De meg is írtad az eljárást, mert a fordító az üres részeket 'kigyomlálja', ha a begin end között nincs semmi nem veszi figyelembe. Ha neme titok küldd el az egész projektet a simkol@pro.hu-ra, mert így csak találgatni tudok.
2016. júl. 22. 10:32
Hasznos számodra ez a válasz?
 8/16 A kérdező kommentje:
Nem titok, egy játék kezdemény. Elment az emailra. Illetve még pár perc és ott van. Delphi 3-ban írom.
2016. júl. 22. 11:12
 9/16 SimkoL ***** válasza:
Ment válasz.
2016. júl. 22. 11:53
Hasznos számodra ez a válasz?
 10/16 SimkoL ***** válasza:

A hiba borzalmasan egyszerű volt. Ha egy osztályon belül deklarálunk egy eljárást elég az eljárás nevét, paramétereit megadni, de a megvalósításkor már a teljes elérhetőségét.

private

...

procedure celtorles(Sender: TObject);

...

implementation

...

procedure TForm1.celtorles(Sender: TObject);

2016. júl. 22. 12:05
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!