Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Wait Animation (https://www.delphipraxis.net/192029-wait-animation.html)

EWeiss 16. Mär 2017 06:13

AW: Wait Animation
 
Zitat:

Dann würd ich das aber als DLL machen. Damit wird zwar die Last der Anwendung zugeordnet, aber das ist ja auch richtig so, da sie ja auch das Warten verursacht.
Die frage wäre dann nur was passiert beim laden einer List mit mehr als 5000 Einträge (SoundListe)
wenn das laden schon verhindert das die Anwendung erst später angezeigt wird, läuft die Animation dann noch?
Zitat:

Das ganze mit 2-3 Funktionen (start/stop evtl. init fürs PNG) und gut
Habe zwei Initialize, DeInitialize
Initialize erstellt das Window und startet die Animation (jetzt in einem Thread)
Deinitialize stoppt die Animation und zerstört das Window.
Gut könnte man umbenennen was aber an der eigentlichen Funktion nichts ändert.

Zitat:

Commandline-Aufrufe sind für einen Programmierer schwieriger zu handeln, als einfache Funktions-Aufrufe
Sollte eigentlich kein Problem sein solange man sich an die Gegebenheiten hält.
Delphi-Quellcode:
procedure TForm1.StartAnimation;
var
  ExePath: PWideChar;
  Parameter: PWideChar;
begin
  // Parameter 1 = Png File
  // Parameter 2 = Delay
  // Parameter 3 = ParentHandle
  ExePath := PWideChar(ExtractFilePath(ParamStr(0)) + 'Spinner.exe');
  Parameter := PWideChar('/Eagle.png/30' + '/' + IntToStr(Handle));
  ShellExecute(0, 'open', ExePath, Parameter, nil, SW_SHOW);
end;
Ich parse dann in der Funktion nach dem erstellen des Windows die CmdLine mit dem Delemiter "/"

Delphi-Quellcode:
function IsFile(FileName: String): Boolean;
begin

  Result := FileExists(FileName) and not DirectoryExists(FileName);
end;
Delphi-Quellcode:
    Style := WS_POPUP or WS_VISIBLE;
    MainHandle := CreateWindowExW(WS_EX_TOOLWINDOW or WS_EX_TOPMOST, 'Spinner',
      '', Style, 0, 0, 0, 0, 0, 0, hInstance, nil);

    CmdLine := split(lpCmdLine, '/');

    if High(CmdLine) > 0 then
    begin
      if IsFile(CmdLine[1]) then
        Initialize(StrToInt(CmdLine[3]), MainHandle, ExtractFilePath(ParamStr(0)) + CmdLine[1],
          StrToInt(CmdLine[2]));
    end
    else
      DestroyWindow(MainHandle);
sollte eigentlich für kein Programm ein Problem sein ShellExecute aufzurufen. (Abgesehen von den UAC User Rechten)

Zitat:

Vorteile DLL:

- Ist nur einmal im Speicher, auch wenn mehrere Anwendungen parallel die DLL nutzen
- Die Steuerung ist von der Anwendung aus einfacher.
- Kann von den meisten Programmiersprachen aus genutzt werden (selbst Script-Sprachen)
- Weniger Probleme mit den Windowsrechten auf einem Mehrbenutzer-System (und damit bei der
Installation einer Anwendung)
Das ist alles richtig ;)
Zitat:

Eine Komponente könnte man dann auch auf der DLL aufbauen (für die ClickyClicky-Fraction)
Habe nichts dagegen wenn du Lust hast dir das zu überlassen mit der Komponenten.
Sag bescheid lade dann den Quelltext der DLL hoch .

Optimierung was die CPU Auslastung angeht kann man immer noch.
Ist halt auch abhängig davon wie groß die Animationen sind und dem entsprechenden Delay dazu.
Habe bisher von den erstellten Strips die ich habe eine Last zwischen 0 und 15%

Die Nachteile der EXE sind dann doch schwerwiegender abgesehen davon ob die Animationen auch noch laufen wenn die Anwendung selbst
wartet oder warten muss wenn ich die DLL Version letztendlich verwende.

EDIT:
Eventuell was noch fehlt.
Eine Callback in der die Start und beenden Aufrufe gestartet werden abhängig von der aktuellen Auslastung der Anwendung.
Vielleicht zu kompliziert? (Async Thread?)

gruss

Ghostwalker 16. Mär 2017 07:04

AW: Wait Animation
 
Zitat:

Zitat von EWeiss (Beitrag 1364360)
Zitat:

Dann würd ich das aber als DLL machen. Damit wird zwar die Last der Anwendung zugeordnet, aber das ist ja auch richtig so, da sie ja auch das Warten verursacht.
Die frage wäre dann nur was passiert beim laden einer List mit mehr als 5000 Einträge (SoundListe)
wenn das laden schon verhindert das die Anwendung erst später angezeigt wird, läuft die Animation dann noch?

Da der die Startfunktion vor dem Starten der Ladefunktion aufgerufen wird, wird die auch
zuerst ausgeführt :) Sollte also schonmal kein Problem sein. Natürlich kann es zu Ruckel-Effekten
kommen, wenn das ganze den Rechner arg überlastet, aber das Problem hast du mit jeglichen Geschichten in der Hinsicht (selbst mit der simplen Progress-Bar).

Zitat:

Zitat:

Das ganze mit 2-3 Funktionen (start/stop evtl. init fürs PNG) und gut
Habe zwei Initialize, DeInitialize
Initialize erstellt das Window und startet die Animation (jetzt in einem Thread)
Deinitialize stoppt die Animation und zerstört das Window.
Gut könnte man umbenennen was aber an der eigentlichen Funktion nichts ändert.
Richtig, wie sie heißen is Wurscht.:-D

Zitat:

Zitat:

Commandline-Aufrufe sind für einen Programmierer schwieriger zu handeln, als einfache Funktions-Aufrufe
Sollte eigentlich kein Problem sein solange man sich an die Gegebenheiten hält.
Delphi-Quellcode:
procedure TForm1.StartAnimation;
var
  ExePath: PWideChar;
  Parameter: PWideChar;
begin
  // Parameter 1 = Png File
  // Parameter 2 = Delay
  // Parameter 3 = ParentHandle
  ExePath := PWideChar(ExtractFilePath(ParamStr(0)) + 'Spinner.exe');
  Parameter := PWideChar('/Eagle.png/30' + '/' + IntToStr(Handle));
  ShellExecute(0, 'open', ExePath, Parameter, nil, SW_SHOW);
end;
Ich parse dann in der Funktion nach dem erstellen des Windows die CmdLine mit dem Delemiter "/"

Delphi-Quellcode:
function IsFile(FileName: String): Boolean;
begin

  Result := FileExists(FileName) and not DirectoryExists(FileName);
end;
Delphi-Quellcode:
    Style := WS_POPUP or WS_VISIBLE;
    MainHandle := CreateWindowExW(WS_EX_TOOLWINDOW or WS_EX_TOPMOST, 'Spinner',
      '', Style, 0, 0, 0, 0, 0, 0, hInstance, nil);

    CmdLine := split(lpCmdLine, '/');

    if High(CmdLine) > 0 then
    begin
      if IsFile(CmdLine[1]) then
        Initialize(StrToInt(CmdLine[3]), MainHandle, ExtractFilePath(ParamStr(0)) + CmdLine[1],
          StrToInt(CmdLine[2]));
    end
    else
      DestroyWindow(MainHandle);
sollte eigentlich für kein Programm ein Problem sein ShellExecute aufzurufen. (Abgesehen von den UAC User Rechten)
Aber im Vergleich zu einem Funktionsaufruf doch weit umständlicher :)

Zitat:

Zitat:

Vorteile DLL:

- Ist nur einmal im Speicher, auch wenn mehrere Anwendungen parallel die DLL nutzen
- Die Steuerung ist von der Anwendung aus einfacher.
- Kann von den meisten Programmiersprachen aus genutzt werden (selbst Script-Sprachen)
- Weniger Probleme mit den Windowsrechten auf einem Mehrbenutzer-System (und damit bei der
Installation einer Anwendung)

Das ist alles richtig ;)
Zitat:

Eine Komponente könnte man dann auch auf der DLL aufbauen (für die ClickyClicky-Fraction)
Habe nichts dagegen wenn du Lust hast dir das zu überlassen mit der Komponenten.
Sag bescheid lade dann den Quelltext der DLL hoch .
Optimierung was die CPU Auslastung angeht kann man immer noch.
Ist halt auch abhängig davon wie groß die Animationen sind und dem entsprechenden Delay dazu.
Habe bisher von den erstellten Strips die ich habe eine Last zwischen 0 und 15%

Die Nachteile der EXE sind dann doch schwerwiegender abgesehen davon ob die Animationen auch noch laufen wenn die Anwendung selbst
wartet oder warten muss wenn ich die DLL Version letztendlich verwende.
[/QUOTE]

Das mit der Komponente kann ich gerne machen. Btw..da fällt mir ein, wenn jemand unbedingt das
als eigenständige EXE braucht, kann er sich ja auch ein kleines Programmschreiben, das dann extra
ausgeführt wird :)
Zitat:

EDIT:
Eventuell was noch fehlt.
Eine Callback in der die Start und beenden Aufrufe gestartet werden abhängig von der aktuellen Auslastung der Anwendung.
Vielleicht zu kompliziert? (Async Thread?)

gruss
Die Auslastung würd ich garnicht hernehmen, schließlich muss die permanent überprüft werden (egal ob nun in der Anwendung selbst oder in einem externen Programm oder in der DLL).

EWeiss 16. Mär 2017 07:12

AW: Wait Animation
 
Zitat:

Das mit der Komponente kann ich gerne machen. Btw..da fällt mir ein, wenn jemand unbedingt das
als eigenständige EXE braucht, kann er sich ja auch ein kleines Programmschreiben, das dann extra
ausgeführt wird
Supi ;)

Mache das noch mit dem Thread fertig addier noch ein paar Animationen zum testen und lade es dann hoch.
Werde dann den Versuch mit der EXE löschen.

gruss

EWeiss 16. Mär 2017 08:24

AW: Wait Animation
 
Neue Version oben incl. Thread\Source und neuer Animationen.
Hoffe du findest nicht zu viele Fehler ;)

Hier auf die schnelle noch ne Anim
Im Source Archiv enthalten.

Einfach im Projekt zur Case addieren ..

Delphi-Quellcode:
    if SpinnerCount = 9 then
      SpinnerCount := 0;
Auf 8 erhöhen und das anfügen.

Delphi-Quellcode:
      6:
        begin
          Spinner := CTRL_SpinnerCreate;
          SpinnerHandle := Spinner.CreateWindow(Handle);
          SpinnerFile := ExtractFilePath(ParamStr(0)) + 'spinn.png';
          Spinner.Start(Handle, SpinnerHandle, SpinnerFile, 100);
        end;

      7:
        begin
          Spinner := CTRL_SpinnerCreate;
          SpinnerHandle := Spinner.CreateWindow(Handle);
          SpinnerFile := ExtractFilePath(ParamStr(0)) + 'butterfly.png';
          Spinner.Start(Handle, SpinnerHandle, SpinnerFile, 75);
        end;

      8:
        begin
          Spinner := CTRL_SpinnerCreate;
          SpinnerHandle := Spinner.CreateWindow(Handle);
          SpinnerFile := ExtractFilePath(ParamStr(0)) + 'cube01.png';
          Spinner.Start(Handle, SpinnerHandle, SpinnerFile, 16);
        end;

gruss

Ghostwalker 16. Mär 2017 13:04

AW: Wait Animation
 
Sieht gut aus. Das einzige das ich vermisse ist,
das ich keinen Stream statt eines Dateinamens (für die Animation) angeben kann.:zwinker:


Komponente is auch so gut wie fertig :)

EWeiss 16. Mär 2017 13:09

AW: Wait Animation
 
Zitat:

Zitat von Ghostwalker (Beitrag 1364390)
Sieht gut aus. Das einzige das ich vermisse ist,
das ich keinen Stream statt eines Dateinamens (für die Animation) angeben kann.:zwinker:

Dann noch eins.. ;) Ist einiges an Arbeit die Anims zu erstellen :)
Im Source Archiv enthalten.

Ja das Problem ist mit Streams das ich GdipDrawImageRectRectI die einzelnen Frames zeichne.
Ich muss mich mal schlau machen ob es möglich ist die Animationen als Stream zu zeichnen. (Habs noch nie gemacht)
Das bringt allerdings nur etwas wenn das einen kräftigen Schub bringt was die Auslastung angeht.

Solltest du was anderes meinen dann kannst du es gerne ändern wenn es möglich ist und es deiner Meinung etwas bringt.

Hoffentlich schlägt Daniel mich nicht für die ganzen Uploads.

Zitat:

Komponente is auch so gut wie fertig
Supi! :thumb:

gruss

Ghostwalker 16. Mär 2017 13:41

AW: Wait Animation
 
Neeeee....Streams wie TStream als Quelle der Animation. Damit könnte man z.B. das png mit in die Resource der Anwendung packen und dann statt filename einfach einen TResourceStream übergeben :)

EWeiss 16. Mär 2017 13:50

AW: Wait Animation
 
Zitat:

Zitat von Ghostwalker (Beitrag 1364395)
Neeeee....Streams wie TStream als Quelle der Animation. Damit könnte man z.B. das png mit in die Resource der Anwendung packen und dann statt filename einfach einen TResourceStream übergeben :)

Ach so..
JO würde gehen macht aber die EXE dementsprechend groß ;)
So wie es im Moment ist, ist man unabhängig und kann Nacheinander die Anims laden so wie man sie gerade braucht.

gruss

Ghostwalker 16. Mär 2017 13:55

AW: Wait Animation
 
Naja...die Varianten schließen sich ja nicht aus :) Entweder ein Dateiname oder ein Stream.

EWeiss 16. Mär 2017 13:59

AW: Wait Animation
 
Zitat:

Zitat von Ghostwalker (Beitrag 1364399)
Naja...die Varianten schließen sich ja nicht aus :) Entweder ein Dateiname oder ein Stream.

Jo gegen eine Kombination hätte ich nichts ;)

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.
Seite 2 von 5     12 34     Letzte »    

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