Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Timer.Enable := True; aber Form wir dzur Laufzeit erstellt... (https://www.delphipraxis.net/172704-timer-enable-%3D-true%3B-aber-form-wir-dzur-laufzeit-erstellt.html)

SlaterBenelli 18. Jan 2013 11:52

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:
procedure TVSRepApp.Main;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMAin, FfrmMain);
  FfrmMain.Start(Self);
  Application.Run;

end;
der "Start Quelltext" sieht so aus:

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

stahli 18. Jan 2013 12:09

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...

SlaterBenelli 18. Jan 2013 12:20

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:
procedure TfrmMain.FormActivate(Sender: TObject);
begin
  frmMain.TimerAlwaysToDo.Enabled := True;
end;
Das selbe auch beim onCreate von von frmMain...

DeddyH 18. Jan 2013 12:25

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?

stahli 18. Jan 2013 12:30

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...

SlaterBenelli 18. Jan 2013 12:33

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...

SlaterBenelli 18. Jan 2013 12:34

AW: Timer.Enable := True; aber Form wir dzur Laufzeit erstellt...
 
Zitat:

Zitat von stahli (Beitrag 1199578)
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...

Wie meinst Du das?
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...

stahli 18. Jan 2013 12:48

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:
procedure TfrmMain.FormActivate(Sender: TObject);
begin
  {Self.}TimerAlwaysToDo.Enabled := True;
end;
Aber ich würde diesen Sonderweg verwerfen und die Standardimplementierung von Delphi nutzen.

SlaterBenelli 18. Jan 2013 13:00

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...

stahli 18. Jan 2013 13:14

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 08:46 Uhr.
Seite 1 von 2  1 2      

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