AGB  ·  Datenschutz  ·  Impressum  







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

operator is und as

Ein Thema von DelphiDeveloper · begonnen am 17. Nov 2003 · letzter Beitrag vom 18. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#1

operator is und as

  Alt 17. Nov 2003, 20:45
ich habe folgendes Problem

FormA mit Property Blabla
FormB mit Property Blabla

Beide Formulare rufen FormC auf, in der das property Blabla gesetzt wird

mit dem "is" und "as" Operator bzw. "self.owner" kann ich zwar festellen welchem formular
ich das Property fülle aber ich suche nach einer eleganteren Lösung als die folgende:

in FormC:
if self.owner is TFormA then
with self.owner as TFormA do begin
BlaBla := irgendwas;
...

end;

if self.owner is TFormB then
with self.owner as TFormB do begin
BlaBla := irgendwas;
...

end;

Kennt jemand eine elegantere Möglichkeit?

mfg
DelphiDeveloper
  Mit Zitat antworten Zitat
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#2

Re: operator is und as

  Alt 17. Nov 2003, 20:52
Hi,

versuche doch
Delphi-Quellcode:
procedure FormC.SetBLABLA( Sender: TObject; xxxx ? );
begin
  if Sender is FormA then
  begin
    with Sender as FormA do
    begin



    end;
  end
  else if Sender is FormB then
    with Sender as FormB do
    begin



    end;
end;
du musst schon den Sender übergeben.

Delphi-Quellcode:
FormA ...
   FormC.SetBLABLA( Self, xxxx ?
Ich hoffe es Hilft.

mfg Rumpi
  Mit Zitat antworten Zitat
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: operator is und as

  Alt 17. Nov 2003, 20:58
Danke für die schnelle Antwort aber ob nun
"self.owner" oder "sender" die haessliche if Verzweigung bleibt.

Es muss doch über ein typecasting irgendwie eleganter gehen.

Es könnten ja viele Formulare und viele Properties sein.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: operator is und as

  Alt 17. Nov 2003, 21:02
width TFormB(Sender) do
begin

end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#5

Re: operator is und as

  Alt 17. Nov 2003, 21:03
Ups,

zu schnell geantwotet

Du erzeugst also FormC aus FormA oder FormB heraus???

Delphi-Quellcode:
procedure FormA. ...
begin
  if Not Assigned( FormC ) then
    FormC := TFormC.Create( Self );
  try
    FormC.ShowModal;

    ...
  finally
    FreeAndNil( FormC );
  end;
end;

//oder

procedure FormB. ...
begin
  if Not Assigned( FormC ) then
    FormC := TFormC.Create( Self );
  try
    FormC.ShowModal;

    ...
  finally
    FreeAndNil( FormC );
  end;
end;
Hab ich das nun richtig verstanden ?
Dann ist das was du da machst genau richtig.

mfg Rumpi
  Mit Zitat antworten Zitat
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#6

Re: operator is und as

  Alt 17. Nov 2003, 21:13
Hi,

OK ich glaube jetzt hab ich's.
Bedingt aber oben genannte Erzeugung!

Delphi-Quellcode:
  
// musst du in eine ander unit stellen !
  TXForm = class( TForm )
    procedure BLABLA; virtual; abstract; //
  end;

  TFormA = class( TXForm )
    procedure BLABLA; override;
  end;

  TFormB = class( TXForm )
    procedure BLABLA; override;
  end;


  ...
  FormC

  TXForm(Owner).BLABLA; // ruft automatisch TFormA.BLABLA. oder TFormB.BLABLA;
mfg Rumpi
  Mit Zitat antworten Zitat
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: operator is und as

  Alt 17. Nov 2003, 21:20
Delphi-Quellcode:
procedure FormA. ...
begin
  if Not Assigned( FormC ) then
    FormC := TFormC.Create( Self );
  try
    FormC.ShowModal;

    ...
  finally
    FreeAndNil( FormC );
  end;
end;

//oder

procedure FormB. ...
begin
  if Not Assigned( FormC ) then
    FormC := TFormC.Create( Self );
  try
    FormC.ShowModal;

    ...
  finally
    FreeAndNil( FormC );
  end;
end;
ja genau so rufe ich FormC auf, den Gedanken mit dem gemeinsamen Parentformular hatt ich auch schon,
schien mir aber ein bisserl zu heftig als Lösung.

Trotzdem danke Rumpi für die schnelle Hilfe

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#8

Re: operator is und as

  Alt 17. Nov 2003, 23:13
Variation zum Thema:
Delphi-Quellcode:
type
  TFormA = class;
  TFormB = class;
  TFormC = class;

  TFormA = class(TForm)
    private
      DasCForm : TFormC;
    ...
    procedure MachBlaBlaMitMir(Sender:TObject);
    ...
  end;

  TFormB = class(TForm)
    ...
    procedure MachBlaBlaMitMir(Sender:TObject);
    ...
  end;
 
  TFormC = class(TForm)
  private
    FTuDochWas : TNotifyEvent;
    ...
  public
    property TuDochWas : TNotifyEvent read FTuDochWas write FTuDochWas;
    ...
  end;
iplementation

procedure TFormA.ErzeugeFormC
begin
  if not Assigned(TFormC) then begin
    DasCForm := TFormC.Create(self);
    DasCForm.TuDochWas := MachBlaBlaMitMir;
    DasCForm.Show;
  end;
end;

procedure TFormA.MachBlaBlaMitMir(Sender:TObject);
begin
  ...
end;

procedure TFormB.MachBlaBlaMitMir(Sender:TObject);
begin
  ...
end;

TFormC.MachAktionMitMutterForm
begin
  if Assigned(FTuDochWas) then begin
    FTuDochWas; // funzt mit jeder art von Mutterform, egal ob TFormA,-B,D,EFGHIJKLM...
    // wenn das nur einmal passieren soll, dann:
    FTuDochWas := nil;
  end;
end;
Code nicht getestet/so nicht funktional/nur sinngemäßer Richtungshinweis

Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Bernd Ua

Registriert seit: 10. Nov 2003
Ort: Lindhorst
87 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: operator is und as

  Alt 17. Nov 2003, 23:35
Zitat:
den Gedanken mit dem gemeinsamen Parentformular hatt ich auch schon,
schien mir aber ein bisserl zu heftig als Lösung.
Da bieten sich doch interfaces an und können in diesem Fall die Basisklasse ersetzen

Delphi-Quellcode:
type
  IBlaBla = interface
    ['{D277B854-3DFF-4838-B8B9-A87EF5C55B1F}']
    procedure SetBla(Value: Integer);
    function GetBla : Integer;
    property Blabla : Integer read GetBla write SetBla;
  end;

  TFormA = class(Tform,IblaBla)
  public
    function GetBla: Integer;
    procedure SetBla(Value: Integer);
  end;

  TFormB = class(TForm,IblaBla)
  public
    function GetBla: Integer;
    procedure SetBla(Value: Integer);
  end;
und beim Zugriff ginge das dann so:

Delphi-Quellcode:
var
  aForm : TForM;
...
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Supports(aForm,IBlaBla) then // vorher prüfen um Exception zu vermeiden
    (aForm as IblaBla).Blabla := 12;
end;

janz ohne if else
(BTW - geht so (ohne weiteren Code) erst ab Delphi 6 , bei D5 etc müsste noch IUnknown implementiert werden)

Bernd
Bernd Ua
  Mit Zitat antworten Zitat
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#10

Re: operator is und as

  Alt 18. Nov 2003, 10:37
Hi Bernd,

Zitat:
Delphi-Quellcode:
type
  IBlaBla = interface
    ['{D277B854-3DFF-4838-B8B9-A87EF5C55B1F}']
    procedure SetBla(Value: Integer);
    function GetBla : Integer;
    property Blabla : Integer read GetBla write SetBla;
  end;

  TFormA = class(Tform,IblaBla)
  public
    function GetBla: Integer;
    procedure SetBla(Value: Integer);
  end;

  TFormB = class(TForm,IblaBla)
  public
    function GetBla: Integer;
    procedure SetBla(Value: Integer);
  end;
muss da nicht in TFormA und B SetBla vor GetBla kommen so wie in IBlaBla?
mfg Rumpi No.5
  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:48 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