![]() |
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- |
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:... |
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 ![]() |
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:... |
Re: Ereignisse eines Forms in anderer Unit verarbeiten
Hab ja auch lang genug überlegt, um es einfach rüberzubringen :mrgreen:
|
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:
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.
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; Woran kann das liegen? :gruebel: -c- |
Re: Ereignisse eines Forms in anderer Unit verarbeiten
Zitat:
Gruß, teebee |
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!? |
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:... |
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 17:58 Uhr. |
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