AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formular mit TAnimate - separater Thread

Ein Thema von mm1256 · begonnen am 15. Apr 2015 · letzter Beitrag vom 15. Apr 2015
 
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Formular mit TAnimate - separater Thread

  Alt 15. Apr 2015, 13:10
Hallo,

ich habe ein simples Formular mit einem TAnimate drauf, das ich zur Anzeige benutze, wenn längere (Datenbank-)Operationen laufen. Prinzipiell funktioniert das auch, das Problem ist nur, dass die Animation (CommonAVI := aviCopyFiles) zwar angezeigt wird, aber ohne dieses Application.ProcessMessages-Gedöns nicht abläuft.

Die Ursache ist mir auch klar: Das Formular bekommt zu wenig CPU-Zeit. Die Lösung ist mir auch klar: Das Formular muss in einen eigenen Thread.

Mit Threads stehe ich ein bischen auf dem Kriegsfuß, und die Beispiele die ich im WEB gefunden habe, passen irgendwie nicht. Hier mal die komplette Unit.

Delphi-Quellcode:
unit RuAnimate;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.ShellAnimations,
  Vcl.ExtCtrls;

type
  TFrmRuAnimate = class(TForm)
    ShellResources1: TShellResources;
    Panel1: TPanel;
    Animate1: TAnimate;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

procedure RuAnimate_Open(ACaption: string);
function RuAnimate_Update(ACaption: string): boolean;
procedure RuAnimate_Close;


implementation

{$R *.dfm}

procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall; external user32 Name 'SwitchToThisWindow';

procedure RuAnimate_Open(ACaption: string);
begin
  if not RuAnimate_Update(ACaption)
  then with TFrmRuAnimate.Create(Application) do begin
    Caption := ACaption;
    Show;
  end;
  Application.ProcessMessages;
end;

function RuAnimate_Update(ACaption: string): boolean;
var
  HandleFrmRuAnimate: THandle;
begin
  HandleFrmRuAnimate := FindWindow(PChar('TFrmRuAnimate'),nil);
  Result := HandleFrmRuAnimate > 0;
  if Result then begin
    if IsIconic(HandleFrmRuAnimate) then SendMessage(HandleFrmRuAnimate, WM_SYSCOMMAND, SC_RESTORE, 0 );
    SwitchToThisWindow(HandleFrmRuAnimate, TRUE);
    SetForegroundWindow(HandleFrmRuAnimate);
    SendMessage (HandleFrmRuAnimate, WM_SETTEXT, 255, Integer(PChar(ACaption)));
  end;
  Application.ProcessMessages;
end;

procedure RuAnimate_Close;
var
  HandleFrmRuAnimate: THandle;
begin
  HandleFrmRuAnimate := FindWindow(PChar('TFrmRuAnimate'),nil);
  if HandleFrmRuAnimate > 0 then SendMessage (HandleFrmRuAnimate, WM_CLOSE,0,0);
  Application.ProcessMessages;
end;

procedure TFrmRuAnimate.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

end.
Die Frage ist also, wie baue ich die 3 Schnittstellen-Routinen in einen Thread ein? Vielen Dank schon mal vorab für eure Hilfe.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
 


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 21:53 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