In einem Projekt übernimmt eine bestimmte Form den Ausdruck des Fensters einer weiteren Form. Es erfolgt jedoch immer nur ein Ausdruck aus der 1. Instanz. Wie kann man das Druckmodul veranlassen, auf die 2. bzw. 3. Instanz zuzugreifen?
Hallo.
In einem Projekt übernimmt eine bestimmte Form den Ausdruck
des Fensters einer weiteren Form. Es erfolgt jedoch immer nur
ein Ausdruck aus der 1. Instanz. Wie kann man das Druckmodul
veranlassen, auf die 2. bzw. 3. Instanz zuzugreifen?
Eine etwas detailliertere Beschreibung wäre schon vorteilhaft.
Geht es dabei um MDI?
VG
Carsten
Hallo, das Fenster, das in mehreren Instanzen aufgerufen wird ist MDI-Child, das Druckmodul jedoch nicht, es steht außerhalb MDI. Könnte das geschilderte Problem davon abhängig sein? Danke!
Hallo, Martin.
Hallo, das Fenster, das in mehreren Instanzen aufgerufen wird
ist MDI-Child, das Druckmodul jedoch nicht, es steht außerhalb
MDI. Könnte das geschilderte Problem davon abhängig sein?
Danke!
Da ich nicht weiß, wie Dein Druckmodul aussieht, kann ich auch nicht feststellen, woran das liegt (falls ich das überhaupt kann).
Da Du aber ein Druckmodul verwendest, könnte ich mir vorstellen, dass Du nicht mit ‚PrintForm‘ arbeitest, sondern tatsächlich eine eigene Prozedur zum Drucken programmiert hast. Falls das so sein sollte, mußt Du die zu druckenden Daten eines jeden MDI-Childs natürlich irgendwie an dieses Druckmodul übergeben.
Wie rufst Du denn die Prozedur zum Drucken auf?
Läuft das über einen Menü-Eintrag?
In welchen Formular hast Du diesen Menü-Eintrag?
VG
Carsten
Hallo Carsten,
das Druckmodul ist von mir mit VB6 programmiert worden (nicht printform). Der Aufruf erfolgt über das Menu des MDI-Childs, was ja bei der Bildung weiterer Instanzen mitgereicht wird. Ich habe testweise das Druckmodul auch als MDI-Child gesetzt - ohne Erfolg. Ebenso habe ich in der aufrufenden Form zum Druck verschiedene Einstellungen geändert (Negotiated Menu) - ebenfalls ohne Effekt. Muss bei der Bildung der 2. bzw. weiteren Instanz irgeneine Aktivierung vorgenommen werden? Alle anderen Funktionen arbeiten korrekt.
Kan man, oder sollte man vielleicht die hWnd mitgeben?
Hallo Martin.
das Druckmodul ist von mir mit VB6 programmiert worden (nicht
printform). Der Aufruf erfolgt über das Menu des MDI-Childs,
was ja bei der Bildung weiterer Instanzen mitgereicht wird.
Ich habe testweise das Druckmodul auch als MDI-Child gesetzt -
ohne Erfolg. Ebenso habe ich in der aufrufenden Form zum Druck
verschiedene Einstellungen geändert (Negotiated Menu) -
ebenfalls ohne Effekt. Muss bei der Bildung der 2. bzw.
weiteren Instanz irgeneine Aktivierung vorgenommen werden?
Alle anderen Funktionen arbeiten korrekt.
Kan man, oder sollte man vielleicht die hWnd mitgeben?
mit hWnd kenn’ ich mich nicht aus.
Wenn das Ganze über ein Menü des MDI-Childs läuft, dann erfolgt ja jeder Aufruf „einzeln“. Das ist ja schon 'mal gut.
Scheinbar ist es wohl so, dass die Daten irgendwie nicht richtig übergeben werden. Folgende Vorgehensweise könnte da Abhilfe schaffen:
Vorher noch eine Anmerkung: Alles Folgende ist nur aus einer Erinnerung heraus geschrieben und Erfolg ist nicht garantiert. Daher Deinen vorhandenen Code nicht löschen, sondern nur auskommentieren.
Füge Deiner Anwendung ein weiteres Modul hinzu und deklariere darin einen öffentlichen, benutzerdefinierten Typen. Gebe diesem dann
alle Mitglieder, die für den Ausdruck relevant sind, z.B. so:
Public Type MeinDruckTyp
Name As String
Strasse As String
Hausnummer As Integer
PLZ As String
Ort as String
End Type
Wechsele nun zum Code-Fenster Deines Druckmoduls.
Ändere Deine DruckProzedur folgendermaßen:
Public Sub MeineDruckProzedur(ByVal DruckDaten As MeinDruckTyp)
With DruckDaten
Printer.Print .Name
Printer.Print .Strasse
Printer.Print CStr(.Hausnummer)
Printer.Print .PLZ
Printer.Print .Ort
End With
End Sub
Wechsele nun zum Code-Fenster Deines MDI-Childs.
Deklariere für das MDI-Child eine private Variable vom Typ ‚MeinDruckTyp‘, z.B. so:
Private ChildDruck As MeinDruckTyp
Füge nun im Click-Ereignis des Drucken-Menü-Buttons Code hinzu (vor dem Aufruf des Druckprozedur), in dem alle relevanten Werte aus dem MDI-Child in den Typen geschieben werden, z.B. so:
Private Sub Druck\_Click()
With ChildDruck
.Name = TextBox1.Text
.Strasse = TextBox2.Text
.Hausnummer = CInt(TextBox3.Text)
.PLZ = TextBox4.Text
.Ort = TextBox5.Text
End With
Call MeineDruckProzedur(ChildDruck)
End Sub
Bitte 'mal ausprobieren; interessiert mich selbst brenned, ob’s hinhaut.
VG
Carsten
Hallo Carsten,
danke für die Hinweise. Ich werde über Deine Vorschläge nachdenken, diese und andere ausprobieren. Ich kann mich aber frühestens in 14 Tagen wieder melden, da ich noch anderes zu tun habe.
MfG
Martin
Hallo Carsten, ich bin leider auf dem geplanten Weg nicht weiter gekommen. Druck und Speicherung würden nur funktionieren, wenn man den Code in die Instanz einbaut und nicht eine separate Anwendung aufruft. Ich helfe mir, indem ich bei Bedarf die Arbeiten der 2. und weiteren Instanzen auf die erste Instanz kopiere. Nochmals vielen Dank für die Hilfestellung!
MfG Martin Kienbaum