AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit 2. Formular

Ein Thema von gfjs · begonnen am 23. Jan 2006 · letzter Beitrag vom 25. Jan 2006
Antwort Antwort
Seite 1 von 3  1 23      
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#1

Problem mit 2. Formular

  Alt 23. Jan 2006, 19:58
Hallo, Allerseits.

Und schon das nächste Problem mit Delphi 2005:

Ich habe über Datei/Neu/Weitere.../Neue Dateien ein zweites Formular zu meinem Projekt hinzugefügt. Dann einen Button auf Formular1 und:

Delphi-Quellcode:
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
  winForm1.Show;
end;
Ich war schon erstaunt, dass nicht (wie aus Delphi 5 gewohnt) die Meldung kam: "Formular 'Form1' referenziert Formular 'Form2' ... Unit einbinden? Hab ich dann selbst gemacht: Uses ...., Winform1;

Mit F9 versucht zu starten:

[Fehler] WinForm.pas(95): E2003 Undefinierter Bezeichner: 'Show'

Wo hab' ich da einen Fehler gemacht? - Bin für Hinweise wie immer äußerst dankbar (weil Delphi-2005-frustrierrt).

mfg gfjs
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Problem mit 2. Formular

  Alt 23. Jan 2006, 20:10
Moin,

es sieht so aus als ob du deine Fenster jetzt selber erstellen/freigeben must (finde ich super, endlich muss ordentlich programmiert werden!).

Also so...
Delphi-Quellcode:
procedure TWinForm.Button_Click(sender: System.Object; e: System.EventArgs);
var WinForm1:TWinForm1;
begin
  WinForm1:=TWinForm1.Create;
  try
    WinForm1.ShowDialog;
  finally
    WinForm1.Free;
  end;
end;
Show gibt es noch. ShowModal gibt es leider nicht mehr da gibt es jetzt ShowDialog für.

MfG
Thorsten
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem mit 2. Formular

  Alt 24. Jan 2006, 04:37
@ omata

Guten Morgen und vielen Dank für Deine Antwort.

Wenn ich das richtig verstanden habe, wird jetzt nur noch das Startformular automatisch erstellt und alle anderen Formulare muss ich selbst erstellen und beim Schließen wieder freigeben?!

Sorry, wenn ich mich ein bißchen blöd anstelle, aber es sind noch immer meine ersten Gehversuche mit Delphi 2005:

Wenn ich ein Formular mit "Close" schließe, wird dann automatisch "Free" aufgerufen oder kann ich es dann einfach mit "Show" wieder anzeigen?

Für ein paar zusätzliche Informationen wäre ich dankbar.

mfg gfjs
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Problem mit 2. Formular

  Alt 24. Jan 2006, 15:24
Ja, ich gebe zu ich habe da auch noch nicht so viel mit gemacht.

Mit deinem Show habe ich auch mal rumprobiert. Das geht dann natürlich nicht mehr so wie in meinem obigen Beispiel, weil das Fenster dann gleich wieder verwindet.
Wenn man allerdings eine Private-Variable anlegt von Typ: TWinForm1 kann man im Create von TWinForm das zweite Fenster erzeugen und in dem Button-Event mit Show dieses Fenster sichtbar machen.
Allerdings wollte ich dann dieses Fenster selber wieder freigeben (im destruktor), das geht auch alles.
Nur wenn man das Fenster schliesst und wieder über den Button anzeigen lassen möchte, dann gibt es eine Fehlermeldung, die ich noch nicht so ganz verstehe.
Alternative war dann einfach alles so machen wie in meinem obigen Beispiel nur das Free weglassen. Dabei weiss ich allerdings nicht, ob der Speicher auch wieder freigegegen wird. Leider kenne ich kein Tool (Win32 -> MemProof) das mir das anzeigen könnte.
Deshalb rate ich von Show ab, mach es lieber mit ShowDialog.
Warum muss das Hauptfenster aktiv bleiben?

MfG
Thorsten
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Problem mit 2. Formular

  Alt 24. Jan 2006, 15:54
Was du als "Free" bezeichnest ist in .Net Dispose des IDisposable Patterns, welches sich um alles kümmert, was für die GC unsichtbar ist (zum Beispiel DCs, Fenster,...).
Alles was IDisposable implementiert ist also potenziell memleak gefährdet.

Wenn du ein Form normal aufrufst, wird mit Close gleich ein Dispose ausgeführt.
Bei ShowDialog passiert das nicht! Wäre ja auch schlimm wenn dir der Dialog zerstört werden würde bevor du sein Ergebnis abfragen kannst.
Für modale Dialoge würde das also so aussehen:
Delphi-Quellcode:
using dialog := new DeineDialogKlasse() do
  if dialog.ShowDialog() = DialogResult.OK then
    ...
Oder in D.Net:
Delphi-Quellcode:
var dialog : DeineDialogKlasse;
begin
  dialog := DeineDialogKlasse.Create();
  try
    if dialog.ShowDialog() = &DialogResult.OK then
      ...
  finally
    dialog.Dispose();
  end;
Dispose würde auch durch den Finalizer aufgerufen werden, aber Finalizer sind Handbremsen und gehören zu den Dingen, die Unwissende gerne zu der Litanei ".Net ist langsam" verleiten.

Zitat:
Leider kenne ich kein Tool (Win32 -> MemProof) das mir das anzeigen könnte.
Suche mal nach CLR Profiler im MSDN. Ist ein sehr gutes FreeWare Tool und zeigt dir Dinge an, von denen du in MemProof nur träumen konntest...
Robert Giesecke
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Problem mit 2. Formular

  Alt 24. Jan 2006, 16:01
@Elvis: Danke für deine Erklärungen.

Leider bist du auf die Verwendung von Show nicht eingegangen, gerade das wäre aber sehr interresant.

MfG
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Problem mit 2. Formular

  Alt 24. Jan 2006, 16:17
Zitat von Elvis:
Wenn du ein Form normal aufrufst, wird mit Close gleich ein Dispose ausgeführt.
Sozusagen ein sauberer Selbstmord .
Zitat:
When a form is closed, all resources created within the object are closed and the form is disposed. You can prevent the closing of a form at run time by handling the Closing event and setting the Cancel property of the CancelEventArgs passed as a parameter to your event handler. If the form you are closing is the startup form of your application, your application ends.

The one condition when a form is not disposed on Close is when it is part of a multiple-document interface (MDI) application, and the form is not visible. In this case, you will need to call Dispose manually to mark all of the form's controls for garbage collection.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Problem mit 2. Formular

  Alt 24. Jan 2006, 16:21
Ja wunderbar, nur der Ausgangsthread ging immer noch um Show wie wäre es wenn sich ein Wissender mal dazu herablassen könnte und uns nicht wissende mal etwas erleuchten würde.

Hoffnungsvollge Grüsse
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Problem mit 2. Formular

  Alt 24. Jan 2006, 16:42
Zitat:
Ja wunderbar, nur der Ausgangsthread ging immer noch um Show
Tja, mein Post auch .
Mit einem Aufruf von Show wird die Visible-Property auf true gesetzt. Hide bewirkt das Gegenteil. Wenn nun aber Close aufgerufen wird oder der User das Fenster schließt, wird - wie von Elvis und dem SDK schon geschrieben - das Fenster freigegeben.
Zitat von Reflector:
Code:
private void WmClose(ref Message m)
{
      FormClosingEventArgs args1 = new FormClosingEventArgs(this.CloseReason, false);
      [...]
      if ((m.Msg != 0x11) && !args1.Cancel)
      {
            [...]
            base.Dispose();
      }
}
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Problem mit 2. Formular

  Alt 24. Jan 2006, 17:06
Zitat von Khabarakh:
Zitat:
Ja wunderbar, nur der Ausgangsthread ging immer noch um Show
Tja, mein Post auch .
Mit einem Aufruf von Show wird die Visible-Property auf true gesetzt. Hide bewirkt das Gegenteil. Wenn nun aber Close aufgerufen wird oder der User das Fenster schließt, wird - wie von Elvis und dem SDK schon geschrieben - das Fenster freigegeben.
Zitat von Reflector:
Code:
private void WmClose(ref Message m)
{
      FormClosingEventArgs args1 = new FormClosingEventArgs(this.CloseReason, false);
      [...]
      if ((m.Msg != 0x11) && !args1.Cancel)
      {
            [...]
            base.Dispose();
      }
}
Ach, khabarakh! - "Immer diese Fremdsprachen"!

Vielen Dank für Deine Bemühungen, aber damit kann ich leider gar nichts anfangen. Ich werd' einfach mal ein wenig rumprobieren und hoffen, dass ich weiterkomme.

mfg gfjs
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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