AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ereignisse eines Forms in anderer Unit verarbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Ereignisse eines Forms in anderer Unit verarbeiten

Ein Thema von cBoB · begonnen am 20. Apr 2004 · letzter Beitrag vom 20. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von cBoB
cBoB

Registriert seit: 5. Apr 2004
Ort: Berlin
61 Beiträge
 
Delphi 5 Professional
 
#1

Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 10:32
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-
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 10:37
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.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#3

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 10:43
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 10:50
@himitsu: Genau das wollte ich auch sagen, ich fand nur leider keine so schönen und simplen Worte

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#5

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 10:52
Hab ja auch lang genug überlegt, um es einfach rüberzubringen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von cBoB
cBoB

Registriert seit: 5. Apr 2004
Ort: Berlin
61 Beiträge
 
Delphi 5 Professional
 
#6

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 11:50
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?
-c-
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#7

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 11:55
Zitat von cBoB:
    OnChange := DevCBChange(Dev1);
Lass da mal das Dev1 weg,

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von cBoB
cBoB

Registriert seit: 5. Apr 2004
Ort: Berlin
61 Beiträge
 
Delphi 5 Professional
 
#8

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 12:06
@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!?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 12:09
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.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#10

Re: Ereignisse eines Forms in anderer Unit verarbeiten

  Alt 20. Apr 2004, 12:10
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);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 23:54 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