Autor Beitrag
chrissivo
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 130

WIN XP, WIN 2000, WIN MCE, WIN 98
D5 Pers
BeitragVerfasst: Mi 13.07.05 13:37 
Hallihallo,
ich bin gerade auf folgende Problematik gestoßen:
Ich habe ein "Menü" das einfach auf ein Formular mehrere Buttons setzt. Nun soll diesen Buttons noch eine OnClick-Prozedur zugewiesen werden.
Ich habe mittlerweile mitbekommen, dass diese Prozedur vom Typ TNotifyEvent sein muss.
Soweit so gut ich habe versucht das so zu schreiben. Allerdings meckert der Compiler :

[Fehler] : Inkompatible Typen: Methodenzeiger und reguläre Prozedur

Meine Frage nun: Wie muss die richtige Methodenzuweisung lauten? Ist die Prozedur so richtig geschrieben, wenn ich die Nummer des Buttons herausfinden möchte?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
...
var
  Form5 : TForm5;
  knoepfe : Array[0..9of TButton;
  auswahl : Integer;

function menue(menue : Array of String) : Integer;

implementation

{$R *.DFM}

class procedure klick(Sender : TObject);
begin
     auswahl := StrToInt((Sender as TButton).Name[8]);
     Form5.Close
end;

function menue(menue : Array of String) : Integer;
var
   i : Integer;
begin
     Form5 := TForm5.Create(nil);
     i := 0;
     while (i<=9and (menue[i]<> '')
     do begin
        knoepfe[i] := TButton.Create(nil);
        with knoepfe[i] do
        begin
             Parent := Form5;
             Caption := menue[i];
             Height := 50;
             Width := 150;
             Left := Parent.Width div 2 - Width div 2;
             if i <> 0
             then Top := Height div 2 * i + (i-1)*Height
             else Top := Parent.Height - Height * 3 div 2;
             OnClick := klick;
             Show;
             Repaint
        end;
        Inc(i)
     end;
     Form5.ShowModal;
     Form5.Release;
     result := auswahl
end;
...


Vielen Dank im Vorraus

Chrissi


Zuletzt bearbeitet von chrissivo am Mi 13.07.05 13:52, insgesamt 2-mal bearbeitet
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 13.07.05 13:43 
schreib mal hier um:
ausblenden Delphi-Quelltext
1:
class procedure klick(Sender : TObject);					

das sollte reichen
funktioniert das "return auswahl" ? müsste eigentlich result := auswahl heissen

verwende bitte in zukunft delphi tags

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
chrissivo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 130

WIN XP, WIN 2000, WIN MCE, WIN 98
D5 Pers
BeitragVerfasst: Mi 13.07.05 13:51 
Vielen Dank für die schnelle Hilfe.
Leider funktioniert es noch immer nicht. :roll:
Ich habe den Quelltext angepasst. Oben steht schon die veränderte Version! Der Compiler liefert denselben Fehler!

Das mit return funktionierte wahrscheinlich auch nicht. War ich irgendwie noch von Java gewöhnt...
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 13.07.05 13:54 
guck mal hier: da wird erklärt wie das gehen muss
www.delphi-forum.de/...=tdummy&start=20
(ca. in der mitte)
den tip mit class procedure hab ich mal erhalten, aber selber noch nie getestet

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
chrissivo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 130

WIN XP, WIN 2000, WIN MCE, WIN 98
D5 Pers
BeitragVerfasst: Mi 13.07.05 14:21 
Ok,
das war einigermaßen hilfreich!
Das mit der Dummy-Klasse habe ich auch probiert, hatte da aber nur Fehler. Habe deswegen der "klick"-Prozedur noch das TForm5 hinzugefügt.
Dem Hinweis in dem anderen Thread bin ich gefolgt und habe dann beim OnClick-Ereignis Form5.klick und nicht TForm5.klick zugewiesen. Änderungen habe ich weitgehend gehighlighted!

Vielen vielen Dank

Chrissi

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
...
type
  TForm5 = class(TForm)
    procedure klick(Sender : TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }


  end;

var
  Form5 : TForm5;
  knoepfe : Array[0..9of TButton;
  auswahl : Integer;

function menue(menue : Array of String) : Integer;

implementation

{$R *.DFM}

procedure TForm5.klick(Sender : TObject);
begin
     auswahl := StrToInt((Sender as TButton).Name[8]);
     Close //hier kann man sich jetzt das Form5 sparen!
end;

function menue(menue : Array of String) : Integer;
var
   i : Integer;
begin
     auswahl := -1;
     Form5 := TForm5.Create(nil);
     i := 0;
     while (i<=9and (menue[i]<> '')
     do begin
        knoepfe[i] := TButton.Create(nil);
        with knoepfe[i] do
        begin
             Parent := Form5;
             Caption := menue[i];
             Height := 50;
             Width := 150;
             Left := Parent.Width div 2 - Width div 2;
             if i <> 0
             then Top := Height div 2 * i + (i-1)*Height
             else Top := Parent.Height - Height * 3 div 2;
             OnClick := Form5.klick;
             Show;
             Repaint
        end;
        Inc(i)
     end;
     Form5.ShowModal;
     Form5.Release;
     result := auswahl;
end;
...