AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi dynamisch erzeugte Forms richtig freigeben
Thema durchsuchen
Ansicht
Themen-Optionen

dynamisch erzeugte Forms richtig freigeben

Ein Thema von die Suchende · begonnen am 1. Jul 2015 · letzter Beitrag vom 3. Jul 2015
Antwort Antwort
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.049 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 21:32
ich mag halt robust und sauber ...
Ich auch, aber bisher seh ich da eher 8 Zeilen Boilerplate code. Das kannst du doch besser, oder?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
redox
(Gast)

n/a Beiträge
 
#2

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 3. Jul 2015, 00:36
ich mag halt robust und sauber ...
Ich auch, aber bisher seh ich da eher 8 Zeilen Boilerplate code. Das kannst du doch besser, oder?
..und vor Allem mit einem Backup zu viel als einem Backup zu wenig

Wer weiß schon, was sich der ursprüngliche Programmierer gedacht hat bei seinem (eventuell bewußten?) Verzicht auf ShowModal...

LG
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#3

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 3. Jul 2015, 08:37
Wer weiß schon, was sich der ursprüngliche Programmierer gedacht hat bei seinem (eventuell bewußten?) Verzicht auf ShowModal...
Unter Umständen, sogar sehr viel.

Ich für meinen Teil benutze auch nie ShowModal und keine Standard-Dialog-Fenster, da sonst der Rest der Anwendung nicht mehr bedient werden kann.

Beispiel:
Die Anwendung hat ein Hauptfenster, welches oben an Bildschirm angezeigt wird und einfach (fast) nur ein Menu hat.

Wenn ich jetzt aber ein Fenster Modal aufrufen würde (auch zum Beipiel ein Unterfenster eines Unterfensters), dann könnte ich kein anderes Fenster öffnen und müsste die Bearbeitung abbrechen um nur einmal schnell einem Kunden an Telefon eine andere Auskunft geben zu können.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower ( 3. Jul 2015 um 08:41 Uhr)
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 3. Jul 2015, 10:27
Hallo,

es geht wieder zurück zur ursprünglichen Problematik und da hab ich in #7 schon geschrieben

Zitat:
Also weg mit allen BorderIcons und Alt+F4 abfangen, und gut isses. Dann wird auch sauberer Code daraus.
Damit ist es so was von egal, ob ich das Fenster modal anzeige, wobei in dem Fall vom ursprünglichen Programmierer modale Anzeige aus welchen Gründen auch immer nicht gewollt war, oder ob das Fenster normal angezeigt wird. Und wenn ich das Verhalten öfter brauche, vererbe ich das Fenster einfach. Ich hab noch keine Uni von innen gesehen, und mir das Programmieren selber beigebracht. Meine Kenntnisse sind daher mit Euren nicht vergleichbar, aber das wäre für mich - in diesem speziellen Fall - wiederverwendbarer, flexibler, leicht nachvollziehbarer und lesbarer Code. Wir wissen ja, Code wird öfter gelesen als geschrieben

Delphi-Quellcode:
unit Foo;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TFoo = class(TForm)
    ButtonSave: TButton;
    ButtonClose: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure ButtonSaveClick(Sender: TObject);
    procedure ButtonCloseClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

procedure TFoo.ButtonCloseClick(Sender: TObject);
begin
  // wenn Daten verändert, dann User fragen, ob er speichern möchte
  // und dann schließen
  Close;
end;

procedure TFoo.ButtonSaveClick(Sender: TObject);
begin
  // Daten speichern
end;

procedure TFoo.FormClose(Sender: TObject; var Action: TCloseAction);
begin // Formular freigeben
  Action := caFree;
end;

procedure TFoo.FormCreate(Sender: TObject);
begin // Formulareigenschaften vorbereiten
  BorderIcons := [];
  KeyPreview := true;
end;

procedure TFoo.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin // Schließen des Fensters mit [Alt] + [F4] verhindern
  if ((ssAlt in Shift) and (Key = VK_F4)) then Key := $0000;
end;

end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TFoo.Create(Application) do ShowModal;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  with TFoo.Create(Application) do Show;
end;
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#5

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 3. Jul 2015, 11:44
Hallo,

es geht wieder zurück zur ursprünglichen Problematik und da hab ich in #7 schon geschrieben

Zitat:
Also weg mit allen BorderIcons und Alt+F4 abfangen, und gut isses. Dann wird auch sauberer Code daraus.
Auch wenn Du das in #7 schon geschrieben hast, es wird nicht besser.

Durch das Entziehen aller BorderIcons nimmst Du dem Benutzer, welcher mit der Tastatur arbeitet, unnötigerweise (weil Du es so willst), einfach die Möglichkeit seine gewohnte Weise ein Fenster zu verschieben oder in der Größe zu ändern.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 3. Jul 2015, 12:43
Da mag die Frage erlaubt sein: Wie viele Anwender wenden es in der Praxis an, bzw. wissen überhaupt, dass man mit [Alt]+[Leertaste] das Menü öffnen, hier "Verschieben" auswählen, und dann das Fenster mit den Pfeiltasten verschieben kann? Und für den Fall, dass das gewünscht ist, dann reicht eine einzige Zeile Code, ohne dass die übrige Funktionalität/logik verändert werden muss:

BorderIcons := [biSystemMenu];
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#7

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 3. Jul 2015, 13:01
Und für den Fall, dass das gewünscht ist, dann reicht eine einzige Zeile Code, ohne dass die übrige Funktionalität/logik verändert werden muss:

BorderIcons := [biSystemMenu];
Und schon hast Du wieder Dein [X] und den Menueintrag "Fenster schließen" über welche Dein Fenster geschlossen werden könnte.


Da mag die Frage erlaubt sein: Wie viele Anwender wenden es in der Praxis an, bzw. wissen überhaupt, dass man mit [Alt]+[Leertaste] das Menü öffnen, hier "Verschieben" auswählen, und dann das Fenster mit den Pfeiltasten verschieben kann?
Ausserdem geht es ja nicht nur um die Tastaturbedienung.

Wenn Du biSystemMenu nicht setzt, dann hast Du niemals die Icons für Minimieren Maximieren und Hilfe und natürlich auch kein ProgrammIcon.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower ( 3. Jul 2015 um 13:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 03:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz