PMan wrote:Du hattest Recht, TableView war noch eingeschaltet. Ich habe es ausgeschaltet und kann jetzt mit dem Debugger starten. Dabei zeigt sich allerdings, dass die Routine Form_OnTimer nicht angesprungen wird und damit die Befehle in dieser Routine - z.B. Me.Caption = ho_FormCap - auch nicht abgearbeitet werden. Dies bedeutet, dass ich die Einstellungen für das eigentliche Handling des Formulars, das ja in Form_OnTimer stehen soll, nicht erreiche.
Private Sub Form_OnOpen()
'Window-Handling
Dim iLabLen as Integer = 0, iFldLen as Integer = 0
Dim iFormX as Integer = 0, iFormY as Integer = 0
Me.Visible = False
Timer_CreateForm.Interval = 1000
Timer_CreateForm.Enabled = True
Timer_CreateForm.Start
FormDim(iLabLen, iFldLen, iFormX, iFormY)
End Sub 'Form_OnOpen________________________________________________________
Private Sub FormDim(iLabLen as Integer, iFldLen as Integer, _
iFormX as Integer, iFormY as Integer)
Timer_CreateForm.Enabled = False
Me.Caption = ho_FormCap
Me.Width = 1000
Me.Height = 500
Me.X = 500
Me.Y = 200
Me.Visible = True
Timer_CreateForm.Stop
End Sub 'FormDim____________________________________________________________
PMan wrote:Hi Bernd,
ich habe einmal Deinen Vorschlag rudimentär umgesetzt und hoffe, dass die Umsetzung Deiner Beschreibung entspricht. Auf jeden Fall ist diese Version lauffähig. Im Formular wurde ein Timer (Timer_CreateForm) plaziert, der in den Properties auf Enable = false eingestellt worden ist.
Festgestellt habe ich dabei, dass die Einstellung in den Form-Properties Visible = false beim Öffnen der Form ignoriert wird. Deswegen wird die Zeile Me.Visible = False notwendig, um das Formular während der Einstellarbeiten auszublenden.
Ist das so vorgesehen?
Alle benötigten Controlls werden dann in der Routine FormDim eingefügt und gefüllt nachdem das Formular auf die richtige Größe gebracht und an die richtige Stelle verschoben wird. Der Timer mit 1 sec. sollte kurz genug sein.
Entspricht das Vorgehen Deiner Vorstellung?
- Code: Select all
Private Sub Form_OnOpen()
'Window-Handling
Dim iLabLen as Integer = 0, iFldLen as Integer = 0
Dim iFormX as Integer = 0, iFormY as Integer = 0
Me.Visible = False
Timer_CreateForm.Interval = 1000
Timer_CreateForm.Enabled = True
Timer_CreateForm.Start
FormDim(iLabLen, iFldLen, iFormX, iFormY)
End Sub 'Form_OnOpen________________________________________________________
Private Sub FormDim(iLabLen as Integer, iFldLen as Integer, _
iFormX as Integer, iFormY as Integer)
Timer_CreateForm.Enabled = False
Me.Caption = ho_FormCap
Me.Width = 1000
Me.Height = 500
Me.X = 500
Me.Y = 200
Me.Visible = True
Timer_CreateForm.Stop
End Sub 'FormDim____________________________________________________________
PMan wrote:Hi Bernd,
es funktioniert nur solange, wie keine Controls angelegt werden. Also habe ich den Timer-Event eingebaut und die wesentlichen Abschnitte des Form_OnOpen in Routinen ausgelagert. Wenn alle Routinen, die das Fenster manipulieren und Controlls anlegen aus Timer-Event aufgerufen werden, tritt der Fehler seltener auf, aber er tritt auf. Ich konnte jedoch damit den Zeitpunkt des Fehlers eingrenzen. Es zeigt sich, dass der Fehler immer in den Routinen auftritt, die Controls mit ControlAppend anlegen.
Ich habe einmal das Fenster und die Routinen zur Steuerung der SQL-Commandos angehängt. Es sollte an jeder MySQL-Datenbank mit jeder beliebigen Tabelle laufen. Zwei Punkte sind jedoch zu beachten. Zum einen bestimmen iScreenW und iScreenH die am Rechner vorliegenden Bildschirmbreite und Höhe. Sie können auch durch feste Werte ersetzt werden. Zum anderen werden Foreing Keys ermittelt. Dort besteht die Bedingung, dass es in der Tabelle ein Feld gibt, das einen Teil des Tabellennamens ausweist.