Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Forms und OOP (https://www.delphipraxis.net/68155-forms-und-oop.html)

Christian18 25. Apr 2006 14:35


Forms und OOP
 
Hallo,

ich habe mal eine Frage zu der Objektorientieren Programmierung unter Delphi 7 Professional. Ist es möglich, wenn man mit Fenstern arbeitet, Objektorientiert zu programmieren??? Ich meine wenn man ein neues Formular (eine neue Form) haben möchte, dann wird diese ja immer von der Klasse TForm abgeleitet. Wenn ich aber zum Beispiel eine Klasse die schon von TForm abgeleitet ist von einer anderen auch noch ableiten. So ich hoffe ich kommte mein primäres Problem relativ gut beschreiben.

Mit freundlichen Grüßen

Christian18

mquadrat 25. Apr 2006 14:37

Re: Forms und OOP
 
Zitat:

Zitat von Christian18
Wenn ich aber zum Beispiel eine Klasse die schon von TForm abgeleitet ist von einer anderen auch noch ableiten.

Also irgendwie fehlt in dem Satz was ;)

Falls die Frage war, ob es in Delphi Mehrfachvererbung gibt: Nein

fkerber 25. Apr 2006 14:40

Re: Forms und OOP
 
Hi!

Von welcher anderen denn z.B.?


Ciao Frederic

Christian18 25. Apr 2006 14:44

Re: Forms und OOP
 
Hallo,

vielen dank für die schnelle antwort. Also ich benutze OOP zum Beipsiel um Quellcode redundanz zu vermeiden. Und dazu müsste ich in einigen Projekten von mir eine Klasse die von TForm schon abgeleitet ist auch noch von einer anderen Klasse ableiten. Das ist jetzt vieleicht ein bisschen schwer zu verstehen, aber ich gebe mal ein Bsp.:

Überall wo ich eingeben habe, kennzeichne ich meine Edit Felder farbig. Um eine Quellcode redundanz zu vermeiden, habe ich eine Procedure entwicklet, die überall in die Subklasse könnte. ich müsste die Editfelder nur mit der Procedure verbinden und dann funktinierts. da ich aber jetzt nicht weiß wie ich das anstellen soll, habe ich mir gedacht poste ich das einfach mal. Also habt ihr jetzt einen Tipp für mich??? Ich habe schon versucht an stelle von TForm den Klassennamen meiner übergeordneten klasse zu schreiben, dann funktioniert aber leider das Programm nicht mehr.

MFG Christian18

_Sebastian_ 25. Apr 2006 14:48

Re: Forms und OOP
 
Über Datei/neu/Weitere.. -> Dein Projektname kannst du ein neues Formular von einem bereits vorhandenem Formular ableiten.
Du musst halt dazu ein Basis Formular erstellen das alles gleiche bereits erhält..

mquadrat 25. Apr 2006 14:53

Re: Forms und OOP
 
Also wenn in einem Edit-Feld was drin steht, soll es eine andere Farbe haben wie wenn es leer ist? Dann würde ich mir eher ein neues TEdit ableiten, hat ja mit dem Form eigentlich nix zu tun.

Hansa 25. Apr 2006 17:39

Re: Forms und OOP
 
Das ist immer noch zu undurchsichtig. 8)

Zitat:

Zitat von Christian18
..Also ich benutze OOP zum Beipsiel um Quellcode redundanz zu vermeiden... Überall wo ich eingeben habe, kennzeichne ich meine Edit Felder farbig. Um eine Quellcode redundanz zu vermeiden, habe ich eine Procedure entwicklet...

Richtiger Ansatz, aber was heißt : "Überall wo ich eingeben habe" ? :shock: Präzisiere das mal etwas. Heißt "eingeben habe" : "eine Eingabe möglich ist" ? Oder etwa "wo bereits etwas eingegeben wurde" ? Das ist ein feiner aber gewaltiger Unterschied, wie man das Ganze angehen kann.

Zitat:

Zitat von Christian18
Ich habe schon versucht an stelle von TForm den Klassennamen meiner übergeordneten klasse zu schreiben, dann funktioniert aber leider das Programm nicht mehr.

Was funktioniert denn dann nicht ? Um wieviele Forms geht es überhaupt ?

dataspider 25. Apr 2006 19:31

Re: Forms und OOP
 
Hi,

also, nicht alles muss in eine Basisklasse.
Das Einfärben der Editfelder lässt sich z.B. eleganter lösen:

Delphi-Quellcode:
unit EditColorHandler;

interface
Uses Forms, Classes, Controls, Graphics, StdCtrls;

Const
  _ActiveColor = $009BF5FD;
  _DefaultColor = clWhite;

type
  TEditColorHandler = class(TObject)
  private
    FActiveControl: TWinControl;
    FActive: Boolean;
    procedure SetActive(const Value: Boolean);
  public
    procedure doActiveControlChange(Sender: TObject);
    property Active: Boolean read FActive write SetActive;
  end;

Var
  AppEditColorHandler: TEditColorHandler;

implementation

procedure TEditColorHandler.doActiveControlChange(Sender: TObject);
begin
  if Assigned(FActiveControl) and FActiveControl.HandleAllocated and
    (FActiveControl is TEdit) then
    TEdit(FActiveControl).Color := _DefaultColor;

  FActiveControl := Screen.ActiveControl;

  if FActiveControl is TEdit then
    TEdit(FActiveControl).Color := _ActiveColor;

end;

procedure TEditColorHandler.SetActive(const Value: Boolean);
begin
  if FActive <> Value then
  begin
    FActive := Value;
    if FActive then
      Screen.OnActiveControlChange := doActiveControlChange
    else
      Screen.OnActiveControlChange := nil;
  end;
end;

initialization
  AppEditColorHandler := TEditColorHandler.Create;

finalization
  AppEditColorHandler.Free;

end.
die Unit in Uses des MainForm und an einer günstigen Stelle:

Delphi-Quellcode:
  AppEditColorHandler.Active := True;

Cu, Frank

SirThornberry 25. Apr 2006 19:38

Re: Forms und OOP
 
@dataspider: Wenn du das ganze so angehst (also mit zusäzlicher Unit) wäre es doch bedeutend schöner gleich eine Ableitung von TEdit zu machen.

dataspider 26. Apr 2006 09:38

Re: Forms und OOP
 
Zitat:

Zitat von SirThornberry
@dataspider: Wenn du das ganze so angehst (also mit zusäzlicher Unit) wäre es doch bedeutend schöner gleich eine Ableitung von TEdit zu machen.

Aber nur, so lange es bei einem TEdit bleibt.
Wenn man noch eine Ableitung von TMemo... machen muss, ist die Unit doch einfacher anzupassen.

Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 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