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 Ereignisse eines Forms in anderer Unit verarbeiten (https://www.delphipraxis.net/20599-ereignisse-eines-forms-anderer-unit-verarbeiten.html)

cBoB 20. Apr 2004 10:32


Ereignisse eines Forms in anderer Unit verarbeiten
 
Also folgende Frage:

Form1 wurde in Unit1 erstellt. Darin wurde zur Laufzeit eine ComboBox erstellt. Deren Ereignisbehandlungsroutine sollte aber außerdem noch in einer extra Unit untergebracht werden. Um die Ereignisse zu bearbeiten müssen diese aber Form1 zugeordnet werden, was mir aber irgendwie nicht möglich ist, da das ja in einer anderen Unit steht.
Was muß ich dabei beachten?? In der DelphiHilfe ist zu deisem Thema nix zu finden.

-c-

sakura 20. Apr 2004 10:37

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
Die Ereignismethoden müssen definitiv nicht im gleichen Form (in der gleichen Klasse) stehen, wie diese, in der das Objekt (Deine ComboBox) erstellt ist. Einzige Voraussetzung für die Ereignismethoden ist, daß diese zu einer Klasse (und einem initierten Object) gehören und die korrekte Parameterliste haben.

...:cat:...

himitsu 20. Apr 2004 10:43

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
du machst infach in der anderen Unit 'ne Klasse auf deklarierst dort drin deine Ereignisbehandlungs-Prozeduren und weist einfach in OnCreade deines Formulars diese Routienen deinen Komponenten zu.

z.B. siehe ComboBox - OnChange-Behandlung zuweisen

sakura 20. Apr 2004 10:50

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
@himitsu: Genau das wollte ich auch sagen, ich fand nur leider keine so schönen und simplen Worte :mrgreen:

...:cat:...

himitsu 20. Apr 2004 10:52

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
Hab ja auch lang genug überlegt, um es einfach rüberzubringen :mrgreen:

cBoB 20. Apr 2004 11:50

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
Klingt ja alles ganz logisch und sogar verständlich. Aber ich muß da irgendwo noch nen grundlegenden Denkfehler haben. Folgendes Beispiel soll mal kurz zeigen, wie ich mir das dachte:

Delphi-Quellcode:
unit devices;

interface

uses kl2700,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ComCtrls, StdCtrls, ExtCtrls;

type
  TDevice1 = class(TForm)
    procedure DevCBChange(Sender: TObject);
    procedure DevRep;
  private
  public
  end;

implementation

var Dev1 : TDevice1;

procedure TDevice1.DevCBChange(Sender: TObject);
begin
ShowMessage('Läuft');
end;

procedure TDevice1.DevRep;
const DevNames: array[0..5] of ShortString = ('KL2700','KL487','KL195','HP3440','HP4284','HP6622' );
var ListItem: TStrings;
    i,IndexDList: Integer;
    st_d1:String;

begin
with TCombobox.Create(Dev1) do
  begin
    Parent:=Dev1;
    top:=12;
    left:=8;
    For i:=0 to 5 do
    begin
    IndexDList := Items.Add(DevNames[i]);
    end;
    ItemIndex:=0;
    OnChange := DevCBChange(Dev1);  //hier kommt besagte Fehlermeldung "Inkompatible Typen..."
  end;

end;
So und da der Kompiler diese Unit vor der mit dem Hauptformular erzeugt, kanns ja nicht an dem Aufruf von da aus liegen. Er bricht ja hier schon ab.
Woran kann das liegen? :gruebel:
-c-

teebee 20. Apr 2004 11:55

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
Zitat:

Zitat von cBoB
Delphi-Quellcode:
    OnChange := DevCBChange(Dev1);

Lass da mal das Dev1 weg,

Gruß, teebee

cBoB 20. Apr 2004 12:06

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
@teebee
Hm, komisch - hast Recht gehabt. Aber warum geht das so? Normalerweise müßte ich doch einen Parameter übergeben. Sonst meckert der Kompiler ja auch wegen jeder Kleinigkeit!?

sakura 20. Apr 2004 12:09

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
Du musst Parameter nur bei der Ausführung(!) einer Methode übergeben. Du willst diese jedoch nicht ausführen, sondern die Methode nur einem Ereignis zuweisen, damit diese später ausgeführt werden kann. Das Ereignis übergibt anschließend dann die entsprechenden Parameter.

...:cat:...

himitsu 20. Apr 2004 12:10

Re: Ereignisse eines Forms in anderer Unit verarbeiten
 
Code:
unit device;

interface

uses kl2700,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ComCtrls, StdCtrls, ExtCtrls;

type
  TDevice1 = class(TForm)
    procedure DevCBChange(Sender: TObject);
  public
    procedure DevRep[color=red](Form: TForm)[/color];
  end;

[color=red]var Dev1: TDevice1;[/color]

implementation

procedure TDevice1.DevCBChange(Sender: TObject);
begin
ShowMessage('Läuft');
end;

procedure TDevice1.DevRep[color=red](Form: TForm)[/color];
const DevNames: array[0..5] of ShortString = ('KL2700','KL487','KL195','HP3440','HP4284','HP6622' );
var ListItem: TStrings;
    i,IndexDList: Integer;
    st_d1:String;

begin
with TCombobox.Create([color=red]Form[/color]) do
  begin
    Parent:=[color=red]Form[/color];
    top:=12;
    left:=8;
    For i:=0 to 5 do
      IndexDList := Items.Add(DevNames[i]);
    ItemIndex:=0;
    OnChange := [color=red]DevCBChange;[/color]
  end;
End;

end.
Delphi-Quellcode:
// Hauptunit
Dev1.DevRep(Form1);


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.
Seite 1 von 2  1 2      

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