AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Timer bei fsSTAYONTOP kommt nicht durch

Ein Thema von easywk · begonnen am 28. Jun 2006 · letzter Beitrag vom 28. Jun 2006
Antwort Antwort
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#1

Timer bei fsSTAYONTOP kommt nicht durch

  Alt 28. Jun 2006, 13:12
Hallo zusammen,

aus meinem Hauptform heraus erzeuge ich ein weiteres Form, dass als FormStyle fsSTAYONTOP hat und mit einem einfachen Show angezeigt wird. In diesem Zusatzform gibt es einen Timer, der enabled ist und ein Interval von 500 hat. Direkt nachdem ich das Zusatzform angezeigt habe läuft im Hauptform ein sehr zeitintensiver Rechenprozess ...

Nun mein Problem: der Timer im Zusatzform kommt nicht durch, es sieht so aus, als ob das Fenster einfach keine Rechenzeit zugeteilt bekommt. Wenn ich im Hauptform in die Rechenroutine ab und an ein Application.Processmessages einfüge, dann kommt der Timer im Zusatzform durch - aber das ist in meinen Augen keine Lösung.

Kann ich es irgendwie erreichen, dass das Zusatzform auch Rechenzeit zugeteilt bekommt? Threads sind keine Lösung, da ich auf dem Form zeichnen muss ...

Thanks for help
Bjoern
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Timer bei fsSTAYONTOP kommt nicht durch

  Alt 28. Jun 2006, 13:18
egal wieviel Formulare du hast, sie laufen alle im gleichen Thread ab. Und während in dem Thread etwas gemacht wird können die Nachrichten nicht zeitgliche abgearbeitet werden (somit auch keine Paint-Messages, Timer-Messages etc.). Außer Application.ProcessMessages bleiben dir dann wohl nur noch Threads.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Timer bei fsSTAYONTOP kommt nicht durch

  Alt 28. Jun 2006, 13:22
Zitat von easywk:
Threads sind keine Lösung, da ich auf dem Form zeichnen muss ...
Ja und? Genau deshalb gibt es die Synchronize Methode.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Timer bei fsSTAYONTOP kommt nicht durch

  Alt 28. Jun 2006, 13:38
Zitat von Luckie:
Ja und? Genau deshalb gibt es die Synchronize Methode.
Habe ich dann aber nicht wieder das gleiche Problem mit der Botschaftsschleife? Laut OH wartet Synchronize darauf, dass der Hauptthread in die Botschaftsschleife eintritt - und genau das tut der Hauptthread ja nicht
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Timer bei fsSTAYONTOP kommt nicht durch

  Alt 28. Jun 2006, 13:42
Du sollst die Berechnung in einem Thread durchführen und nicht das Formular anzeigen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Timer bei fsSTAYONTOP kommt nicht durch

  Alt 28. Jun 2006, 13:56
Ok, das wäre eine denkbare Lösung. Da es aber diverse Rechenroutinen gibt wäre es gut, wenn ich dem Thread irgendwie die Routine übergeben könnte, die er ausführen soll ... wo war gleich noch dein Thread-Tutorial?
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Timer bei fsSTAYONTOP kommt nicht durch

  Alt 28. Jun 2006, 14:43
So, in dieser Lösung übergebe ich dem Zusatzformular die Rechenroutine. Das Formular erzeugt einen Thread, führt in diesem Thread die Rechenroutine aus und zeigt ein "Lebenszeichen" an
Delphi-Quellcode:
type
  TMsgProcedure = procedure of object;

  TMsgThread = class(TThread)
    private
    protected
      Working : Boolean;
      procedure Execute; override;
    public
      ExecProc : TMsgProcedure;
    end;

  TFormWorkMessage = class(TForm)
    LabelMsgText: TLabel;
    Label1: TLabel;
    Image1: TImage;
    ImageList1: TImageList;
    Timer1: TTimer;
  private
    { Private-Deklarationen }
    ImgIndex : Integer;
    MyThread : TMsgThread;
  public
    { Public-Deklarationen }
    procedure ShowMessageAndExec(MsgText:String;ExecProc:TMsgProcedure);
  end;

var
  FormWorkMessage: TFormWorkMessage;

implementation

{$R *.dfm}

{ TFormWorkMessage }

procedure TMsgThread.Execute;
begin
  Working:=TRUE;
  Self.ExecProc;
  Working:=FALSE;
end;

procedure TFormWorkMessage.ShowMessageAndExec(MsgText: String;
  ExecProc:TMsgProcedure);
begin
  ImgIndex:=1;
  LabelMsgText.Caption:=MsgText;
  // Thread für die Rechenoperation initialisieren
  MyThread:=TMsgThread.Create(TRUE);
  MyThread.ExecProc:=ExecProc;
  MyThread.Resume;
  Self.Show;
  // "lebenszeichen" Anzeigen und warten bis der Thread fertig ist
  repeat
    ImageList1.GetBitmap(ImgIndex,Image1.Picture.Bitmap);
    if ImgIndex<ImageList1.Count-1 then
      Inc(ImgIndex)
    else ImgIndex:=0;
    Self.Repaint;
    Sleep(250);
  until not MyThread.Working;
  // ordnungsgemäß beenden
  MyThread.Terminate;
  MyThread.WaitFor;
  MyThread.Free;
  Self.Close;
end;
Meinungen?
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.
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