Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   In Abhängigkeit vom Herkunftsformular neues Formular optisch dynamisch zur Laufzeit.. (https://www.delphipraxis.net/195171-abhaengigkeit-vom-herkunftsformular-neues-formular-optisch-dynamisch-zur-laufzeit.html)

Bornholdt 8. Feb 2018 07:36

In Abhängigkeit vom Herkunftsformular neues Formular optisch dynamisch zur Laufzeit..
 
..anpassen.

Hallo zusammen,

eine Frage von einem Programmieranfänger: ich habe ein Dialog, bei dem ich wenn er von Formular A geöffnet wird 4 Buttons anzeigen möchte, wird der selbe Dialog von Formular B geöffnet sollen nur 2 Buttons angezeigt werden.

Kurzzm: "in Abhängigkeit vom Herkunftsformular soll das sich öffnende Formular (Dialog) unterschiedlich aussehen".

Gibt es dafür Codebsp/Anleitungen/Hilfe?

Viele Grüße
Bornholdt

Jasocul 8. Feb 2018 07:53

AW: In Abhängigkeit vom Herkunftsformular neues Formular optisch dynamisch zur Laufze
 
Bevor du deinen Dialog zeigst (vermutlich mit ShowModal), schreibst du folgendes:
Delphi-Quellcode:
  DeineDialogform.Button3.Visible := False; // oder True
  DeineDialogform.Button4.Visible := False; // oder True
Ob False oder True, hängt davon ab, aus welchem Formular du den Dialog aufrufst.

jaenicke 8. Feb 2018 08:05

AW: In Abhängigkeit vom Herkunftsformular neues Formular optisch dynamisch zur Laufze
 
Im Sinne der objektorientierten Programmierung wäre es sinnvoller das zu kapseln:
Delphi-Quellcode:
TDialogForm = class
private
  FCanCancel: Boolean;
public
  property CanCancel: Boolean read FCanCancel write SetCanCancel;
end;

procedure TDialogForm.SetCanCancel(const Value: Boolean);
begin
  FCanCancel := Value;
  btnCancel.Visible := Value;
end;
Auf diese Weise fummelt man nicht von außen an internen Elementen der Klasse herum und hat zudem mit der Property auch eine sinnvolle Benennung warum da etwas sichtbar ist oder nicht.

Klaus01 8. Feb 2018 08:29

AW: In Abhängigkeit vom Herkunftsformular neues Formular optisch dynamisch zur Laufze
 
.. auch im Sinne von OOP könntest Du Dialog.create überladen (polymorphy)
z.b. Dialog.create(Parameter).

Grüße
Klaus

Jasocul 8. Feb 2018 09:14

AW: In Abhängigkeit vom Herkunftsformular neues Formular optisch dynamisch zur Laufze
 
Im Sinn von OOP und vernünftiger Kapselung habt ihr beide Recht. Bedenkt aber, dass der TE ein Anfänger ist und evtl. erstmal eine einfache Lösung benötigt. Trotzdem sollte er natürlich eure Hinweise beachten.

Auch ich programmiere anders. Bei mir gibt es zum Beispiel immer eine Klassen-Prozedur, die alle notwendigen Parameter bekommt. In dieser Prozedur wird die Form erzeugt, eingestellt, verwendet und wieder zerstört. Zugriffe von außen gibt es praktisch gar nicht.

bernau 8. Feb 2018 11:10

AW: In Abhängigkeit vom Herkunftsformular neues Formular optisch dynamisch zur Laufze
 
Zitat:

Zitat von Jasocul (Beitrag 1393358)
Auch ich programmiere anders. Bei mir gibt es zum Beispiel immer eine Klassen-Prozedur, die alle notwendigen Parameter bekommt. In dieser Prozedur wird die Form erzeugt, eingestellt, verwendet und wieder zerstört. Zugriffe von außen gibt es praktisch gar nicht.

Bei mir seit 2-3 Jahren genau so. Bei alten Projekten gibt es ein refactoring, sobald ich an alten Formularen arbeite. Eine Form hat dann immer folgende Kassenfunktion

Delphi-Quellcode:
class function TMeineForm.Execute:boolean;overload;
class function TMeineForm.Execute(aEinBesondererParameter:boolean):boolean;overload;
In den Funktionen wird das Form erzeugt und bei Dialogen auch freigegeben.

Aufgerufen wird das Formular dann so:
Delphi-Quellcode:
if TMeineForm.Execute then
  ...


if TMeineForm.Execute(true) then
  ...
Alles viel Übersichtlicher geworden.

hoika 8. Feb 2018 11:49

AW: In Abhängigkeit vom Herkunftsformular neues Formular optisch dynamisch zur Laufze
 
Hallo,
Frage wurde ja bereit mit verschiedenen Lösungen beantwortet.
Welche Lösung am schnellsten ist, hängt vom aktuellen Quellcode ab.

Den hier bitte auszugsweise posten.


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