Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi "anzeigeunterbrechung" in paintbox verbessern?!? (https://www.delphipraxis.net/50357-anzeigeunterbrechung-paintbox-verbessern.html)

heiopei 24. Jul 2005 13:21


"anzeigeunterbrechung" in paintbox verbessern?!?
 
hallo,
hab folgendes problem:
in einer paintbox wird alle 33ms eine zeichnung aktuallisiert. allerdings wird die darstellung kurz unterbrochen, wenn ich z.b. auf die titelleiste klicke (und drauf bleibe).
wie kann ich das verhindern?
--> soll ich was anderes als paintbox verwenden (image dauert von haus aus zu lang beim zeichnen (33ms))
--> hab jetzt schon die timer-komponente ersetzt durch die tmmtimer-komponente, die im delphi 6 kochbuch
beschrieben wird (soll angeblich viel genauer sein...)
--> ist da vielleicht n thread angebracht (wüsste nicht wie ;-))

naja, vielleicht hat ja noch jemand andere vorschläge

mfg
heiopei

Aenogym 24. Jul 2005 13:33

Re: "anzeigeunterbrechung" in paintbox verbessern?
 
hi,

wenn du dein form verschieben willst, wird alles kurzzeitig aussetzen (innerhalb des prozesses). da hilft eben nur ein zweiter thread. aber ich glaube, dass du selbst dann noch den "fehler" bemerken wirst, da das zeichnen ja so oder so kurzzeitig unterbrochen wird.

aenogym

heiopei 24. Jul 2005 13:40

Re: "anzeigeunterbrechung" in paintbox verbessern?
 
und wie soll ich dann den zweiten thread erstellen können (muss ja ne schleife sein, bzw. n eigener thread für den timer)?
hab so was noch nie gemacht!

mfg
heiopei

turboPASCAL 24. Jul 2005 14:18

Re: "anzeigeunterbrechung" in paintbox verbessern?
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ...

  TDingsThread = class(TThread)
  private
    FParameter: Integer;
  protected
    procedure Execute; override;
  public
    constructor Create(Parameter: Integer);
  end;

var
  Form1: TForm1;
  MyDings: TDingsThread;

implementation

{$R *.dfm}

constructor TDingsThread.Create(Parameter: Integer);
begin
  inherited Create(true);  // Create thread as suspended
  FreeOnTerminate := True; // Yes
  Priority := tpNormal;    // the priority
  FParameter := Parameter;
  Resume;                  // Start the thread
end;

procedure TDingsThread.Execute;
begin
  // Irgendetwas := //Parameter;
  while not Terminated do
  begin
    With Form1.PaintBox1 do
    begin
      Canvas.Lock;
      Canvas.Pen.Color := RGB(Random(255), Random(255), Random(255));
      Canvas.Brush.Color := RGB(Random(255), Random(255), Random(255));
      Canvas.Ellipse(Random(Width), Random(Height),
        Random(Width), Random(Height));
      Canvas.Unlock;
    end;
    if not Terminated then Sleep(33);
  end;
end;

// ----------------------------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyDings := TDingsThread.Create(0);
end;
So könnte ich mir das Vorstellen. Bin mir aber nicht 100 % sicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 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