AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi dynamisch erzeugte Forms richtig freigeben

dynamisch erzeugte Forms richtig freigeben

Ein Thema von die Suchende · begonnen am 1. Jul 2015 · letzter Beitrag vom 3. Jul 2015
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.679 Beiträge
 
Delphi 5 Professional
 
#11

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:13
Außerdem kann man das Schließen eines Forms via [X] im OnCloseQuery "abfangen" oder besser gesagt be-/verarbeiten.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:15
Dann eben so, aber nicht mrOK. Und nur das sollte man im Normalfall prüfen.
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
  Mit Zitat antworten Zitat
BadenPower

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

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:21
Wozu das "X" deaktivieren? Wird das Fenster einfach geschlossen, ist ModalResult mrNone, bei Abbrechen mrCancel und nur bei Bestätigung mrOK. Wo ist das Problem?
Die Antwort bezog sich jetzt nicht auf dieses Fenster/Problem, sondern rein auf den Beitrag von mm1256.

Er wollte doch alle BorderIcons und das Systemmenu verbannen und noch ALT+F4 abfangen.

In diesem Falle, wenn er verhindern wollte, dass das [X] angeklickt werden kann, finde ich es praktischer nur das [X] zu deaktivieren, damit alles andere rund um die Titelleiste aktiv bleibt.
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
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:21
Ich ärger mich aber auch immer, dass man anhand des ModalResults keinen Unterschied erkennen kann, ob der Button "Abbrechen" geklickt wurde, oder nur das Formular geschlossen wurde.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:24
... finde ich es praktischer nur das [X] zu deaktivieren, damit alles andere rund um die Titelleiste aktiv bleibt.
Wie macht man das?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:26
Ich ärger mich aber auch immer, dass man anhand des ModalResults keinen Unterschied erkennen kann, ob der Button "Abbrechen" geklickt wurde, oder nur das Formular geschlossen wurde.
Ja, wenn es mal so etwas wie Delphi-Referenz durchsuchenmrAbort geben würde, dann könnte man ja das an den Button klatschen

Hier die Liste aller ModalResult Werte http://docwiki.embarcadero.com/Libra...ogs.MessageDlg
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 2. Jul 2015 um 16:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:35
Das ist mir sowieso schon immer schleierhaft, warum der eine Knopf "Abbruch" und der andere "Abbrechen" heißt, ist das denn Windows oder ist das Delphi?

Nachtrag: Ich glaube sogar, dass in den ganz frühen Delphiversionen der Knopf für Kind=bkCancel "Abbruch" und nicht "Abbrechen" hieß, kann mich aber auch irren.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina ( 2. Jul 2015 um 16:39 Uhr)
  Mit Zitat antworten Zitat
BadenPower

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

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:39
... finde ich es praktischer nur das [X] zu deaktivieren, damit alles andere rund um die Titelleiste aktiv bleibt.
Wie macht man das?
So wie Du jeden MenuEintrag manipulieren kannst:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure DoFormCloseButtonEnable(AHandle: HWND; AEnable: Boolean);
var
  lMenue: Integer;
begin
  lMenue := Windows.GetSystemMenu(AHandle, LongBool(False));
  if (lMenue <> 0) then
   begin
    if (AEnable) then
     begin
      Windows.EnableMenuItem(lMenue, SC_CLOSE, MF_BYCOMMAND or MF_SYSMENU);
     end
    else
     begin
      Windows.EnableMenuItem(lMenue, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
     end;
   end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DoFormCloseButtonEnable(Handle,false);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  DoFormCloseButtonEnable(Handle,true);
end;

end.
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
Benutzerbild von Stevie
Stevie

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

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 16:52
Das ist mir sowieso schon immer schleierhaft, warum der eine Knopf "Abbruch" und der andere "Abbrechen" heißt
Weil das die Übersetzung von Abort und Cancel ist?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: dynamisch erzeugte Forms richtig freigeben

  Alt 2. Jul 2015, 18:23
Eine dynamische Dialog-Form gibt man einfach wieder frei:
Delphi-Quellcode:
procedure Foo;
var
  LForm: TForm;
begin
  LForm := TFooDialo.Create(nil);
  try
    case LForm.ShowModal of
      mrOK :
        begin
          ...
        end;
      mrCancel :
        begin
          ...
        end;
      ...
    end;
  finally
    LForm.Free;
  end;
end;
Wenn in dem Dialog noch weitere Daten erfasst werden sollen, dann übergibt man vor dem Anzeigen diese Daten und holt sich diese im Erfolgsfall wieder ab:
Delphi-Quellcode:
type
  TFooData = class( TPersistent )
  public
    property SomeStr: string;
    property SomeBool: Boolean;
  end;

type
  TFooDialog = class( TForm )
    Edit1: TEdit;
    Checkbox1: TCheckBox;
  private
    procedure AssignTo( FooData: TFooData ); overload;
    procedure AssignFrom( FooData: TFooData );
  protected
    procedure AssignTo( Dest: TPersistent ); overload; override;
  public
    procedure Assign( Source: TPersistent ); override;
  end;

procedure TFooDialog.AssignTo( FooData: TFooData );
begin
  FooData.SomeStr := Edit1.Text;
  FooData.SomeBool := CheckBox1.Checked;
end;

procedure TFooDialog.AssignFrom( FooData: TFooData );
begin
  Edit1.Text := FooData.SomeStr;
  CheckBox1.Checked := FooData.SomeBool;
end;

procedure TFooDialog.AssignTo( Dest: TPersistent );
begin
  if Dest is TFooData then
    AssignTo( TFooData( Dest ) )
  else
    inherited;
end;

procedure TFooDialog.Assign( Source: TPersistent );
begin
  if Source is TFooData then
    AssignFrom( TFooData( Source ) )
  else
    inherited;
end;
und dann so
Delphi-Quellcode:
procedure Foo( FooData: TFooData );
var
  LDialog: TForm;
begin
  LDialog := TFooDialog.Create( nil );
  try
    LDialog.Assign( FooData ); // Daten an die Form schreiben
    if LDialog.ShowModal = mrOK then
      FooData.Assign( LDialog ); // Daten von der Form lesen
  finally
    LDialog.Free;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:53 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