AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prozeduren aus einer 2. Unit nutzten

Ein Thema von guitar1 · begonnen am 3. Jun 2007 · letzter Beitrag vom 9. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#1

Prozeduren aus einer 2. Unit nutzten

  Alt 3. Jun 2007, 21:40
Hi,

ich schreibe gerade ein Programm, in dem ich einige procedures in eine 2. Unit auslager. in der 2. Unit werden diese in eine Klasse gepackt, damit sie auch Ereignissen zugeordnet werden können (hier OnMouseEnter und Leave; das sollte aber eher nebensächlich sein). will ich nun allerdings einem Ereigniss eine Procedure zuordnen kommt die Fehlermeldung "Undefinierter Bezeichner". ich habe die 2. Unit auch schon in die uses eingebunden! wieso erkennt er die denn dann nicht???

procedures in der 2. Unit (gekürzt):
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, unit1,
  Dialogs, ExtCtrls, StdCtrls, Menus, ComCtrls, Buttons, Grids, ImgList, Registry;

type
  Auswaehlen = class(TObject)
    procedure auswahl0leave(Sender: TObject);
    ...
  end;

var
  auswahl: Array of Timage;

implementation

procedure Auswaehlen.auswahl0leave(Sender: TObject);
begin
  form1.Statusbar.Panels[0].Text:= 'Fertig';
  form1.Statusbar.Panels[2].Text:= '';
  auswahl[0].Transparent:=true;
  auswahl[0].OnClick:= form1.MachWas;
end;

end.
Aufruf in der 1. Unit:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Menus, ComCtrls, Buttons, Grids, ImgList, Registry;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
  end;

implementation

uses unit2;

procedure TForm1.NotenAuswahlEnter(Sender: TObject);
begin
  ton[0].Parent := ScrollBox1;
  ton[0].OnMouseEnter := auswahl0enter; // <-- hier kommt der Fehler
  ton[0].OnMouseLeave := auswahl0leave; // &lt;-- hier auch
end;

end.
was vielleicht noch gesagt werden sollte, dass ist das erste mal das ich in andere Units auslager, deshalb habe ich da noch nicht so viel erfahrung mit, also bitte auch nicht so komliziert erklären.

schon mal danke im Voraus
Andi
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 3. Jun 2007, 21:55
Weil "ton" vielleicht kein Objekt der Klasse Auswaehlen ist?
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 3. Jun 2007, 22:48
muss es das denn sein?? weil "ton" ist ein wärend der laufzeit erstelltes TImage, wenn es rein muss, muss ich es dann wie "auswahl: Array of Timage" einbinden?

naja ich probiers mal, schonmal danke für die schnell antwort
  Mit Zitat antworten Zitat
xxl1

Registriert seit: 21. Apr 2006
88 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 3. Jun 2007, 23:16
Zitat von guitar1:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, unit1,
  Dialogs, ExtCtrls, StdCtrls, Menus, ComCtrls, Buttons, Grids, ImgList, Registry;

type
  Auswaehlen = class(TObject)
  public //
    procedure auswahl0leave(Sender: TObject);
  private //
    ...
  end;

var
  auswahl: Array of Timage;

implementation

procedure Auswaehlen.auswahl0leave(Sender: TObject);
begin
  form1.Statusbar.Panels[0].Text:= 'Fertig';
  form1.Statusbar.Panels[2].Text:= '';
  auswahl[0].Transparent:=true;
  auswahl[0].OnClick:= form1.MachWas;
end;

end.
Du solltest private/public/published benutzen um herauszustellen welche funktionen,prozeduren und variablen wie zu behandeln sind.
Auserdem solltest du constructor und destructor definieren damit die einzelnen teile flexibel erstellt werden können...
jedoch sollte es meines wissens auch so gehen:

Aufruf in der 1. Unit:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Menus, ComCtrls, Buttons, Grids, ImgList, Registry;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
  end;

implementation

uses unit2;

procedure TForm1.NotenAuswahlEnter(Sender: TObject);
begin
  ton[0].Parent := ScrollBox1;
  ton[0].OnMouseEnter := Auswaehlen.auswahl0enter; // <-- hier kommt der Fehler <-- Du musst zu erkennen geben wo die prozedur enthalten ist
  ton[0].OnMouseLeave := Auswaehlen.auswahl0leave; // &lt;-- hier auch
end;

end.
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 4. Jun 2007, 14:25
so, ich hab jetzt mal die 2. unit in public, etc. unterteilt, das hat allerdings nichts geholfen, immer noch der gleiche fehler. Auch mit "ton[0].OnMouseEnter := Auswaehlen.auswahl0enter;" hat sich nur der Fehler geändert xD. jetzt ist es nicht mehr der Fehler "Undefinierter Bezeichner" sondern
Zitat:
[Pascal Fehler] Unit1.pas(1052): E2010 Inkompatible Typen: 'TNotifyEvent' und 'Auswaehlen.auswahl0enter'
@xxl1:
Zitat von xxl1:
Auserdem solltest du constructor und destructor definieren damit die einzelnen teile flexibel erstellt werden können...
Was meinst du damit? Ich habe ja nicht wirklich eine neue Klasse geschrieben, ich wollte ja nur ca 1000 Zeilen Code auslagern in eine andere unit, das hat doch nichts mit de- und constructor zutun, oder? falls doch dann klärt mich auf, was ich da machen soll!

grüße
Andi
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#6

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 4. Jun 2007, 15:41
Zitat von guitar1:
so, ich hab jetzt mal die 2. unit in public, etc. unterteilt, das hat allerdings nichts geholfen, immer noch der gleiche fehler.
Warum sollte das auch was helfen?
IMHO werden Klassenmethoden ohne besondere Zuteilung als Published interpretiert.

Zitat von guitar1:
Auch mit "ton[0].OnMouseEnter := Auswaehlen.auswahl0enter;" hat sich nur der Fehler geändert xD. jetzt ist es nicht mehr der Fehler "Undefinierter Bezeichner" sondern
Zitat:
[Pascal Fehler] Unit1.pas(1052): E2010 Inkompatible Typen: 'TNotifyEvent' und 'Auswaehlen.auswahl0enter'
Stichwort 'Methodenzeiger'
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 4. Jun 2007, 18:01
das mit methodenzeiger hab ich auch schon mal gesucht, aber ich hab nichts gefunden was ich verstanden hab, bzw. was bei mir funktioniert hat, deshalb habe ich extra diese Frage gestellt, umherauszufinden, wie das geht.
So langsam verzweifel ich noch, kann mir nicht jemand einfach sagen, wie ich eine procedure aus einer anderen unit einem event zuordne?

Grüße
Andi
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
guitar1

Registriert seit: 9. Sep 2006
65 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 7. Jun 2007, 00:03
gibts denn keinen hier in der ganzen DP der mir weiterhelfen kann?
http://www.myspace.com/metalinc1
http://andi1007.funpic.de
Thomann Cyberstore mein Tipp für alle die etwas für den Musikgebrauch brauchen =)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 7. Jun 2007, 13:23
TNotifyEvent ist eine Methode. Das heißt, du musst bei der Zuweisung an ein onSowieso auch eine Instanz übergeben, also:
Delphi-Quellcode:
MeinDummy:=Auswaehlen.create;
auswahl[0].OnClick:=MeinDummy.auswahl0leave;
MeinDummy.free; //Erst ganz am Ende (in der Finalization), sonst gibts eine Zugriffsverletzung!
Hoffe geholfen zu haben
Apollonius
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Prozeduren aus einer 2. Unit nutzten

  Alt 7. Jun 2007, 13:24
Zitat von guitar1:
so, ich hab jetzt mal die 2. unit in public, etc. unterteilt, das hat allerdings nichts geholfen, immer noch der gleiche fehler. Auch mit "ton[0].OnMouseEnter := Auswaehlen.auswahl0enter;" hat sich nur der Fehler geändert xD. jetzt ist es nicht mehr der Fehler "Undefinierter Bezeichner" sondern
Zitat:
[Pascal Fehler] Unit1.pas(1052): E2010 Inkompatible Typen: 'TNotifyEvent' und 'Auswaehlen.auswahl0enter'
Hallo,

wenn ich richtig verstanden habe ist ton[0] ein TImage. Ein Standard TImage hat bei mir jedoch keinen Event OnMouseEnter, mich hätte mal interessiert wie bei dir der Prozedurkopf von OnMouseEnter und dein jetziger Code aussieht.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz