AGB  ·  Datenschutz  ·  Impressum  







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

Create überschreiben (newbefrage)

Ein Thema von stephan007 · begonnen am 18. Jun 2007 · letzter Beitrag vom 20. Jun 2007
Thema geschlossen
Seite 2 von 2     12   
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Create überschreiben (newbefrage)

  Alt 19. Jun 2007, 09:30
Sorry, Sorry!

ich hab jetzt wie empfohlen auch mal die Hilfe bemüht.

Da dein Constructor eine virtuelle Methode ist, mußt du folgendes tun:

Constructor Create(AOwner: TComponent; Mode : Modetyp); reintroduce; overload; Nur wenn Du statische Funktionen und Methoden hasst reicht overload. Hier noch mal die Beispiele aus der OH:
Delphi-Quellcode:
type

     T1 = class(TObject)
       procedure Test(I: Integer); overload; virtual;
     end;
     T2 = class(T1)
       procedure Test(S: string); reintroduce; overload;
     end;
      ...
     SomeObject := T2.Create;
     SomeObject.Test('Hello!'); // Ruft T2.Test auf.
     SomeObject.Test(7); // Ruft T1.Test auf.
und
Delphi-Quellcode:
function Func(X: Real; Y: Integer): Real; overload;

    ...
function Func(X: Integer; Y: Real): Real; overload;
Schau aber unbedingt noch mal in die OH. Da ist auch erläutert was man darf und was nicht!

Gruß oki

edit: Formatierung
 
stephan007

Registriert seit: 2. Mär 2007
48 Beiträge
 
#12

Re: Create überschreiben (newbefrage)

  Alt 19. Jun 2007, 09:54
ok, werde mal auch die OH konsultieren.
aber noch zur weieren erklärung: ich will folgendes tun:

ich designe ein fortschritts / progress fenster. oben werden in einer liste die tasks mit zeit angezeigt, unten die balken für den aktuellen task und der total balken.

nun solls aber möglich sein, nicht nur beide panel (habs auf die weise gelöst) gemeinsam anzuzeigen, sondern eventuell auch nur eines der beiden. also z.b. nur die liste oder nur die balken.

und um das zu realisieren, hätte ich die create überschrieben und ihr einen weiteren parameter mitgegeben, in welchem ich mitliefere, wie das fenster auszusehen hat. also entweder eines der beiden oder beide (mach ich derzeit mit einem enum type).

das ein und ausblenden der fenster sollte ja nicht das problem sein, und die abfrage des parameters im create mit case und dann die gewünschten aktionen, aber ich brauch dazu die überladene create, damit ich den windowmodus mitgeben kann.

nur mal so zur ausführlichen erklärung, was ich damit bezwecke.
 
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Create überschreiben (newbefrage)

  Alt 19. Jun 2007, 10:29
Hi,

also, das mit dem überladenen Constructor müßte nun eigentlich klappen. Wenn nicht, muß ich es wohl mal selbst zum Test proggen.

Eine zweite Variante ist, deinem Formular eine neue Eigenschaft zu verpassen. diese nach dem Create setzen und dann das Formular anzeigen. Als bsp. mal der folgende code so eben weg geschrieben:
Delphi-Quellcode:
type
  TModeType = (mt_none,
                mt_guckst_du_da,
                mt_guckst_du_hier
                );

  TMyGuckstDuForm = class(TForm)
  private
    FModeType: TModeType;
    procedure SetModeType(const Value: TModeType);
    { private-Deklarationen }
  protected
    { protected-Deklarationen }
  public
    { public-Deklarationen }
    property ModeType : TModeType read FModeType write SetModeType;
  published
    { published-Deklarationen }
  end;
implementation

{ TMyGuckstDuForm }

{-----------------------------------------------------------------------------
  Procedure: SetModeType
  Author:    oki
  Date:      19-Jun-2007
  Arguments: const Value: TModeType
  Result:    None
  Des.:      hiert wird die Ansicht des fensters in Abhängigkeit von ModeType
            geändert.
-----------------------------------------------------------------------------}


procedure TMyGuckstDuForm.SetModeType(const Value: TModeType);
begin
  FModeType := Value;
  case FModeType of
    mt_none: ............;
    mt_guckst_du_da: ............;
    mt_guckst_du_hier: .............;
  end;
end;
Jetzt kannst du zur Laufzeit dein Fenster normal über den mitgelieferten Constructor creieren, setzt dein Property und zeigst das Fenster an:
Delphi-Quellcode:
var MyForm : TMyGuckstDuForm;
begin
  MyForm := TMyGuckstDuForm.create(self);
  MyForm.ModeType := mt_guckst_du_da;
  MyForm.Show;
end;
Gruß oki
 
stephan007

Registriert seit: 2. Mär 2007
48 Beiträge
 
#14

Re: Create überschreiben (newbefrage)

  Alt 19. Jun 2007, 12:18
danke für die hilfe.
nur eine frage: wozu brauch ich bei dieser variante dann eigentlich noch die überladene create??
die kann ich mir dann ja sparen, oder? achja, zum auslesen des modes brauch ichs ja, d.h. von dort einfach das setmode aufrurufen könnte ich machen
 
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Create überschreiben (newbefrage)

  Alt 19. Jun 2007, 12:19
Zitat von oki:
Jetzt kannst du zur Laufzeit dein Fenster normal über den mitgelieferten Constructor creieren, setzt dein Property und zeigst das Fenster an:
Delphi-Quellcode:
var MyForm : TMyGuckstDuForm;
begin
  MyForm := TMyGuckstDuForm.create(self);
  MyForm.ModeType := mt_guckst_du_da;
  MyForm.Show;
end;
Genau darin seh ich eventuell eine Gefahr. Denn wenn du nicht unbedingt weisst, welche Eigenschaften du setzen musst, bevor du das Form zeigst, wird das wohl beim Anzeigen zu Exceptions führen (können), wenn ModeType elementar wichtig ist für die Darstellung.

Beim Constructor wird der Anwender gezwungen den ModeType mit anzugeben, zumindest dann, wenn der eigene constructor mit reintroduce eingeführt wird.

Delphi-Quellcode:
public
  constructor Create (AOwner : TComponent ; AModeType : TModeType) ; reintroduce ;
 
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Create überschreiben (newbefrage)

  Alt 19. Jun 2007, 12:38
Hi Jelly,

grundsätzlich geb ich dir recht. Nur ist hier nicht der Nutzer am Werk, sondern der Programmierer. Solche "Fehler" sollten dann aber auch abgefangen werden. Dafür schreibe ich bei meinen Typdeklarationen auch immer ein "none" mit rein. Zudem sollte der neue Constructor den alten überladen. Somit sind beide immer noch verwendbar. Der Aufruf ohne ModeType ist somit auch wieder möglich und der von dir beschriebene Fehler tritt auf.

Grundsätzlich glaube ich, dass der Programmierer in Abhängigkeit von den Anwendungsmöglichkeiten seines Fensters diese Entscheidung treffen sollte. Ein besser oder schlechter kann man hier wohl so nicht definieren. Vielleicht ist ein "Default" in der Vorbelegung ein guter Kompromiß.

Gruß oki

[edit]
Tschuldigung, hab Stephans Beitrag glatt übersehen.
Wenn du willst, kannst du ihn dir spaaren. Wenn nicht, spaart dir der neue Constructor eine Zeile Code; die Eigenschaft gibt dir die Möglichkeit den Style des Fensters während es angezeigt wird umzuschalten.

gruß
 
stephan007

Registriert seit: 2. Mär 2007
48 Beiträge
 
#17

Re: Create überschreiben (newbefrage)

  Alt 20. Jun 2007, 10:11
hab mir da nun ein neues problem aufgegabelt:
wie ich schon erwähnt habe, besteht mein programm im wesentlichen aus 3 panels, ein panel enthält die listview, in welches ich einträge vornehmen kann, dann habe ich ein panel, dass den prozessfortschrittsbalken enthält und dann hab ich ein drittes panel, das den gesamt-fortschrittsbalken enthält.

nun will ich wie schon früher geschrieben über den mode angeben, wie mein angezeigtes fenster aussehen soll.
es gibt also die möglichkeiten
*) nur listview panel
*) nur prozessfortschrittsbalken
*) nur totalfortschrittsbalken
*) listivew und prozessbalken
*) listview und gesamtbalken
*) prozessbalken und gesamtbalken
*) alle drei

momentan hätte ich angedacht, mir für jede der 7 möglichkeiten / kombinationen ein element in der enumeration (modetype) zu machen, das gefällt mir aber nicht wirklich, weil ich dann auch 7 case abfragen habe. gibts da nicht eine einfachere lösung, als 7 enumeration typen und damit auch case abfragen?

bin für jede vereinfachung zu haben. und natürlich auch für jeden vorschlag.

wie würdet ihr das oben machen, damit alle 7 varianten für die fensterdarstellung realisierbar sind.

daran, dass das der überschriebenen create mitgeteilt wird, hat sich aber nichts geändert.
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Create überschreiben (newbefrage)

  Alt 20. Jun 2007, 10:15
Wie wäre es mit einer Menge?
Delphi-Quellcode:
type
  TMyModes = (mmListView,mmProgressBar,mmTotalProgress);
  TMyMode = set of TMyModes;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
 
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#19

Re: Create überschreiben (newbefrage)

  Alt 20. Jun 2007, 10:18
Für neue Fragen bitte ein neuer Thread. Auch wenn es weiter um den Mode geht hat das nichts mehr mit der ursprünglichen Frage zu tun. Deshalb mach ich hier mal zu

* * * LOCKED * * *
 
Thema geschlossen
Seite 2 von 2     12   


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 18:20 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