AGB  ·  Datenschutz  ·  Impressum  







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

nachgeladene Form Fenster Drucken

Ein Thema von spartakus · begonnen am 3. Jul 2005 · letzter Beitrag vom 3. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
spartakus

Registriert seit: 20. Feb 2005
22 Beiträge
 
#1

nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 15:24
Hallo !

Ich habe in meinem Programm 2 Formen! Form2 wird mit Form-create erzeugt,
dann möchte ich form2-fenster Drucken (Form2.Print).
aber es gibt eine fehler meldung nach dem ich versuche zu Druken.


Hier ist Code...
Delphi-Quellcode:
 procedure TForm1.Button1Click(Sender: TObject);
 var
  LDialog: TForm2;
 begin
  LDialog := TForm2.create(self);
  try
    LDialog.showmodal;

  finally
    FreeAndNil(LDialog);
  end;
 end;
..................................................................
[delphi]
procedure TForm2.Button1Click(Sender: TObject);
begin
Form2.Print;
end;


danke Mfg
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 15:26
würdest du uns den Fehelr verraten???????????

ich tippe auf eine AV weil dabei
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  Form2.Print;
end;
form2 nie initialisert wird. schließlich weißt du die instanz der Variable Dialog zu.
Abhilfe schafft
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  Self.Print;
end;
Das ist auch im Sinne der Objectorientierung.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
spartakus

Registriert seit: 20. Feb 2005
22 Beiträge
 
#3

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 15:32
Hallo
eine fehler meldung :Adresse 0000000000 nicht gefunden usw.

mfg
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 15:37
hab ichs doch geahnt, die Lösung hab ich ja schon gepostet.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
spartakus

Registriert seit: 20. Feb 2005
22 Beiträge
 
#5

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 15:52
OK
ich werde probieren

danke dir ....
  Mit Zitat antworten Zitat
omata

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

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 17:49
Moin,

eine kleine Anmerkung habe ich da noch:
TForm sollte nicht mit FREE zerstört werden, sondern mit RELEASE

MfG
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 18:12
@omata: Warum mit Release? Mit Release wird doch einfach nur eine message an das Form gepostet welches ein Free aufruft. Somit würde Release nur sinn machen wenn das free innerhalb des gleichen Forms aufgerufen wird. Da aber in diesem Fall FreeAndNil von außerhalb des zu zerstörenden Forms aufgerufen wird, macht Free (FreeAndNil) mehr Sinn.

@spartakus: Wenn das Problem gelöst ist (was es mit der geposteten Lösung ist) dann kennzeischne den Thread als erledigt und lasse ihn nicht weiter als offene Frage..
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
omata

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

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 18:34
War nur ein Hinweis, mach wie du willst.

Aber siehe Delphi-Hilfe:

Beschreibung:
Mit Release können Sie das Formular aus dem Speicher entfernen.

Release gibt das Formular erst frei, nachdem die Ausführung der Ereignisbehandlungsroutinen des Formulars und seiner untergeordneten Komponenten beendet ist. Die Methode stellt auch sicher, daß alle Botschaften in der Ereigniswarteschlange des Formulars vor dessen Freigabe bearbeitet werden. Jede Ereignisbehandlungsroutine für das Formular oder für dessen untergeordnete Objekte sollte Release anstelle von Free (Delphi) oder Delete (C++) benutzen. Ansonsten kann ein Speicherzugriffsfehler auftreten.

Hinweis: Release gibt die Steuerung sofort an die aufrufende Routine zurück und wartet nicht, bis das Formular freigegeben wird.

MfG
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 18:47
@omata: Laut Hilfe stimmt dies zum teil. Angenommen folgende Situtation ist gegeben
Delphi-Quellcode:
procedure TForm1.DoSomeThing;
begin
  ShowMessage('Hallo');
  //Free or Release?
  Caption := 'Test';
end;
In diesem Fall muss man Release verwenden da das Form frühestens nach Beendigung de Procedure zerstört werden soll. Würde man Free nehmen gäbe es dann bei "Caption := ..." eine AV.

Für den Rest dürfte es allerdings keine Rolle spielen.
Natürlich könnte jetzt das Argument kommen das bei Release noch Messages abgearbeitet werden. Aber wer/was verhindert das nach Release noch eine Message an das Programm geschickt wird bevor die Message von Release abgearbeitet wird. Niemand/Nichts und somit wäre man wieder am Anfang - nämlich das nicht alle Nachrichten abgearbeitet sind.

Der Vorteil von Release ist einfach nur der das, das Form erst freigegeben wird wenn die Message abgearbeitet ist welche von Release gesendet wird. Wenn allerdings folgende Situtation gegeben ist
Delphi-Quellcode:
procedure TForm1.DoSomeThing;
begin
  ShowMessage('Hallo');
  //Free or Release?
  Application.ProcessMessage;
  Caption := 'Test';
end;
so spielt es keine Rolle ob man Release oder Free nimmt, denn durch das "Application.ProcessMessages" wird die Message zum freigeben des Formulars auch abgearbeitet bevor das Ende der Procedure erreicht wird und eine AV sollte ebenfalls damit auftreten.

Kurz und Knapp. Wenn man weiß das, das Form und dessen unterkomponenten gerade nichts abarbeiten kann man auch free nutzen, und das sollte hier auch der Fall sein, denn die Anweisung wird ja erst ausgeführt wenn ShowModal zurück gekehrt ist, und dies setzt ja auch vorraus das die wm_close-Nachricht abgeabeitet wurde und somit ist ausgeschlossen das sich die Anwendung gerade in einer Procedure befindet.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
omata

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

Re: nachgeladene Form Fenster Drucken

  Alt 3. Jul 2005, 18:57
Tja, und das ist eben die Frage, wenn man weiss was man tut...

Der sichere Weg für TForm ist Release.
Natürlich kann man sich überlegen, wie man Dinge auch anders hinbekommt.
Aber ich vertrete die Ansicht, sicher zu programmieren. Wenn man ein Programm erstellt, weiss man nicht was da noch alles mal geändert wird. Wenn man also in der Zukunft nicht über Fehler stolpern will, die man gemacht hat, weil man Annahmen gemacht hat, die dann nicht mehr eingehalten werden. Dann sollte man sicher programmieren.

Bezogen auf die aktuelle Frage bedeutet dass, wenn ich in dem Button-Ereignis z.B. die Form über Self.Print ausdrucke und danach ModulResult setzt, um die Form zuverlassen. Dann könnte ich mir vorstellen, dass es zu einer AV kommt. (mit Release aber nicht)

Wie dem auch sei, macht was ihr wollt...

MfG
Thorsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:40 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