unkontrolierter Programmabsturz

Ein Forum zum Erfahrungsaustausch und Hilfestellung in deutscher Sprache.

Re: unkontrolierter Programmabsturz

Postby PMan » Sat Feb 26, 2011 5:00 pm

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.
PMan
 
Posts: 145
Joined: Sat Jul 03, 2010 12:31 pm
Location: Switzerland

Re: unkontrolierter Programmabsturz

Postby berndnoetscher » Sun Feb 27, 2011 8:07 am

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.


Hi
ich dachte so sollte es gehen:
Erstelle einen timer in dem formular. Schalte ihn auf disabled. in on_open auf enabled. bei aufruf der timer function wieder disabled und dann den code der in onopen reinsoll. Das timer intervall sehr niedrig einstellen. Du brauchst einen separaten timer (nicht Form_OnTimer)
berndnoetscher
Site Admin
 
Posts: 1059
Joined: Tue Sep 25, 2007 9:37 am

Re: unkontrolierter Programmabsturz

Postby PMan » Wed Mar 02, 2011 4:52 pm

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
 
Posts: 145
Joined: Sat Jul 03, 2010 12:31 pm
Location: Switzerland

Re: unkontrolierter Programmabsturz

Postby berndnoetscher » Thu Mar 03, 2011 10:43 am

Hi PMan,

du rufst doch FormDim direkt in form_onopen auf, wo wird denn der timer event verwendet? Wenn es so geht würde ich es nicht ändern.



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____________________________________________________________
berndnoetscher
Site Admin
 
Posts: 1059
Joined: Tue Sep 25, 2007 9:37 am

Re: unkontrolierter Programmabsturz

Postby PMan » Sun Mar 06, 2011 1:42 pm

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.
Attachments
Programmabsturz.zip
(8.08 KiB) Downloaded 124 times
PMan
 
Posts: 145
Joined: Sat Jul 03, 2010 12:31 pm
Location: Switzerland

Re: unkontrolierter Programmabsturz

Postby berndnoetscher » Mon Mar 07, 2011 11:52 am

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.


Hi PMan,

das Beispiel ist unvollständig, sodass es nicht ausgeführt werden kann. Jedenfalls wirst Du in ca. vier Wochen auf q7b umsteigen können. Bin dabei die letzten builtins etc. von kbasic zu implementieren. Danach kommt der form designer.
berndnoetscher
Site Admin
 
Posts: 1059
Joined: Tue Sep 25, 2007 9:37 am

Previous

Return to Deutsches Forum (in German only)

cron