![]() |
Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Hallo Leute,
eigentlich klingt es so einfach... Code im Timer-Element soll ausgeführt werden um in der Statusbar Datum und Uhrzeit zu aktualisieren... ... leider ist es das augenscheinlich nicht! Mein Programm habe ich mit einer TMyApp gemacht und dort die Form-Erstellungen reingepackt...
Delphi-Quellcode:
der "Start Quelltext" sieht so aus:
procedure TVSRepApp.Main;
begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TfrmMAin, FfrmMain); FfrmMain.Start(Self); Application.Run; end;
Delphi-Quellcode:
program VSREP;
uses Forms, SysUtils, UfrmMain in 'UfrmMain.pas' {frmMain}, UMyBase in 'UMyBase.pas', UVSRePApp in 'UVSRePApp.pas', USplash in 'USplash.pas' {frmSplash}, ChrisRoutinenSammlung in '..\..\..\UnitSammlungen\ChrisRoutinenSammlung.pas', UMySQLModule in 'UMySQLModule.pas' {MySQLModule: TDataModule}, ULogEintrag in 'ULogEintrag.pas', UMyException in 'UMyException.pas', UPassWord in 'UPassWord.pas' {PasswordDlg}, UFehler in 'UFehler.pas', UFehlerGlossar in 'UFehlerGlossar.pas', UChangeEvent in 'UChangeEvent.pas', UFehlerErfassung in 'UFehlerErfassung.pas' {frmFehlerEingabe}, UfrmNachbearbeitung in 'UfrmNachbearbeitung.pas' {frmNachbearbeitung}, UAppUpdate in 'UAppUpdate.pas', UUser in 'UUser.pas'; {$R *.res} Var VSRepApp : TVSRePApp; begin try // Application.CreateForm(TMySQLModule, MySQLModule); VSRepApp := TVSRePApp.Create; VSRepApp.Main(); FreeAndNil(VSRepApp); Except on ex: TLoginFailExeption do Application.MessageBox( PChar('Bitte beenden Sie das Programm.' + #13 + #10 + ex.Message), 'Fehler beim Login!' ); on ex: Exception do Application.MessageBox( PChar('Bitte beenden Sie das Programm.' + #13 + #10 + ex.Message), 'Fehler in der Anwendung!' ); end; end. Jetzt habe ich auf dem frmMain eine Timer-Komponente liegen die alle 1000 MSec was machen soll... aber ich bekomme da pernament eine Fehlermeldung mit Adressschutzverletzung... Bin ein wenig am verzweifeln... Wie schaffe ich das der Timer NACH dem Application.Run gestartet wird? Ich kann mir sehr gut vorstellen das ich nicht der einzige bin, der hier sowas fragt, aber ich komm anscheinend mit der Forums-Suche nicht zurecht, zumindest habe ich keinen Beitrag gefunden der irgendwie gepasst hat... Sorry! Gruß Christian |
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Ich weiß nicht recht, was Du da genau machst, aber schau doch mal in Deiner Timerbehandlung nach, welche Komponente da u.U. nil ist und führe in diesem Fall ein Exit aus...
|
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Naja,
wenn ich das hier machen will, fliegt mir das ganze um die Ohren:
Delphi-Quellcode:
Das selbe auch beim onCreate von von frmMain...
procedure TfrmMain.FormActivate(Sender: TObject);
begin frmMain.TimerAlwaysToDo.Enabled := True; end; |
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Was macht die benannte Instanz da in der Methode? Wie stahli verstehe auch ich Deine Vorgehensweise nicht recht, hast Du etwas gegen den Delphi-Standard?
|
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Ist denn frmMain eine Formularinstanz zugewiesen?
Vermutlich ist das Objekt noch nil, da Du Dein Formular irgendwie hinten rum erzeugst... Lass doch den Bezeichner mal weg... |
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Du meinst wegen der TMyApp Vorgehensweise?
War vor kurzem auf einem Seminar und da wurde dies so wegen der Exception-Behandlung empfohlen... Soll den Psychologischen Effekt haben das das Programm im Falle eines Falles nicht "abgestürzt" ist sondern vom Anwender beendet wurde... Soll Reklamationen und böse Beschwerden verhindern, wenngleich dies nur Augenwischerei ist... |
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Zitat:
Hintenrum erzeugt stimmt nicht so ganz... Application.CreateForm(TfrmMAin, FfrmMain); FfrmMain.Start(Self); der Code in FfrmMain.Start erzeugt baut eine DB Verbindung auf, erzeugt ein Userobjekt, was dann die die Schnittstelle zum Anwnder darstellt und sich um PW-Abfrage kümmert, etc... danach wird nur Log geschrieben und der Timer, der auf dem frmMain liegt soll aktiviert werden... das bekomme ich nicht hin... |
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Wo hast Du denn fFrmMain deklariert?
Dieses Objekt verwaltet Deine Formularinstanz. In Deiner Klasse greifst Du aber auf das Objekt FormMain zu, das augenscheinlich nicht initialisiert wurde. Das Objekt wird üblicherweise von Delphi beim Programmstart automatisch initialisiert. Wenn Du In der Ereignisbehandlung auf "Self" zugreifst, dann sollte das eigentlich klappen:
Delphi-Quellcode:
Aber ich würde diesen Sonderweg verwerfen und die Standardimplementierung von Delphi nutzen.
procedure TfrmMain.FormActivate(Sender: TObject);
begin {Self.}TimerAlwaysToDo.Enabled := True; end; |
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
ok, habe den Fehler jetzt gefunden und kann den Timer so jetzt auch aktivieren...
in dem Seminar wurde das zwar nett dargestellt, auch das mit den abgeschwächten Reklamationen, aber ich glaube diesen Ansatz werde ich nicht mehr weiterverfolgen, da man sich da ganz leicht selber ein Bein stellt... Aus Eurer Praxis heraus, habt Ihr das Problem mit Kundenreklamationen die sich auf abgestürzte Programme beziehen, die einen solchen Aufwand rechtfertigen würden? Ich schreibe die Anwendungen hier nur für unsere eigene Firma und Abteilungen und wir verkaufen die Lösungen nicht, daher wird dies das einzige Projekt sein, wo ich sowas einbaue... Mich interessiert nur wie es im "normalen" Kundenkontakt gehandelt werden kann/wird... |
AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
Warum sollte ein Programm abstürzen?
Kritische Bereiche müssen eben entsprechend abgesichert werden. Komplettabstürze sollten nicht vorkommen. In jedem Fall kann man Exceptions auch (und besser) im Programm selbst behandeln. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz