Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 ToolBar meiner Programme zu langsam
Autor: Markus Barkholz (---.hsi05.unitymediagroup.de)
Datum:   12.03.21 19:21

Hallo Leute!

Ich habe mir eine kleine Toolbar gebastelt. Funktioniert auch alles soweit. Leider etwas langsam. Die Iconbuttons werden nur ultralangsam von links nach rechts aufgebaut. Beende ich diese Toolbar und starte sie anschließend neu, geht es ratzfatz. Hat jemand eine Idee, wie ich das beschleunigen kann - Optimierungsvorschläge?

Der komplette Code:

  'Hauptfenster erstellen
  WindowTitle "Launcher V1.0"                                           'Windowstitel festlegen
  WindowStyle 16 + 64 + 128                                             'Fenster ohne Meüleiste und ohne Min/Max/Close (Schließen nur über Exit möglich - Wert 128)
  Declare e%, x%, y%
  x% = 36 : y% = 36                                                     'Größe der Icons und der Leiste 
  Window %MaxX/2 - (33*y%)/2 ,2 - 33*x%, y%                             'Vollbild einstellen
 
 
 
  'Objekte für PictureButtons werden erstellt
  Declare hIcon00&, hButton00&, hToolTip00&
  Declare hIcon01&, hButton01&, hToolTip01&
  Declare hIcon02&, hButton02&, hToolTip02&
  Declare hIcon03&, hButton03&, hToolTip03&
  Declare hIcon04&, hButton04&, hToolTip04&
  Declare hIcon05&, hButton05&, hToolTip05&
  Declare hIcon06&, hButton06&, hToolTip06&
  Declare hIcon07&, hButton07&, hToolTip07&
  Declare hIcon08&, hButton08&, hToolTip08&
  Declare hIcon09&, hButton09&, hToolTip09&
  Declare hIcon0A&, hButton0A&, hToolTip0A&
  Declare hIcon0B&, hButton0B&, hToolTip0B&
  Declare hIcon0C&, hButton0C&, hToolTip0C&
  Declare hIcon0D&, hButton0D&, hToolTip0D&
  Declare hIcon0E&, hButton0E&, hToolTip0E&
  Declare hIcon0F&, hButton0F&, hToolTip0F&
  Declare hIcon10&, hButton10&, hToolTip10&
  Declare hIcon11&, hButton11&, hToolTip11&
  Declare hIcon12&, hButton12&, hToolTip12&
  Declare hIcon13&, hButton13&, hToolTip13&
  Declare hIcon14&, hButton14&, hToolTip14&
  Declare hIcon15&, hButton15&, hToolTip15&
  Declare hIcon16&, hButton16&, hToolTip16&
  Declare hIcon17&, hButton17&, hToolTip17&
  Declare hIcon18&, hButton18&, hToolTip18&
  Declare hIcon19&, hButton19&, hToolTip19&
  Declare hIcon1A&, hButton1A&, hToolTip1A&
  Declare hIcon1B&, hButton1B&, hToolTip1B&
  Declare hIcon1C&, hButton1C&, hToolTip1C&
  Declare hIcon1D&, hButton1D&, hToolTip1D&
  Declare hIcon1E&, hButton1E&, hToolTip1E&
  Declare hIcon1F&, hButton1F&, hToolTip1F&
  Declare hIcon20&, hButton20&, hToolTip20&
 
  Var path00$ = $ProgDir + "Tools\FreeBASIC\32\FbEdit.exe"
  Var path01$ = $ProgDir + "Tools\FreeBASIC\64\FbEdit.exe"
  Var path02$ = $ProgDir + "Tools\PureBASIC\32\PureBasic.exe"
  Var path03$ = $ProgDir + "Tools\PureBASIC\64\PureBasic.exe"
  Var path04$ = $ProgDir + "Tools\SpiderBASIC\SpiderBasic.exe"
  Var path05$ = $ProgDir + "Tools\XProfanX4\XProfEd.exe"
  Var path06$ = $ProgDir + "Tools\XDatengenerator\XProfan_Datengenerator.exe"
  Var path07$ = $ProgDir + "Tools\ResourceHacker\ResourceHacker.exe"
  Var path08$ = $ProgDir + "Tools\PrivaZer\PrivaZer.exe"
  Var path09$ = $ProgDir + "Tools\WinRAR-580D\32\WinRAR.exe"
  Var path0A$ = $ProgDir + "Tools\WinRAR-580D\64\WinRAR.exe"
  Var path0B$ = $ProgDir + "Tools\VeraCrypt\VeraCrypt.exe"
  Var path0c$ = $ProgDir + "Tools\gpg4usb\start_windows.exe"
  Var path0D$ = $ProgDir + "Tools\Hex-Editor MX\HexeditMX.exe"
  Var path0E$ = $ProgDir + "Tools\The Bard'sTale Trilogy\TheBardsTaleTrilogy.exe"
  Var path0F$ = $ProgDir + "Tools\The Bard's Tale IV Director's Cut\BardsTale4.exe"
  Var path10$ = $ProgDir + "Tools\kiwix\kiwix-desktop.exe"
  Var path11$ = $ProgDir + "Tools\FreeCommander\FreeCommanderPortable.exe"
  Var path12$ = $ProgDir + "Tools\FirefoxPortable\FirefoxPortable.exe"
  Var path13$ = $ProgDir + "Tools\EssentialPIMPro\EssentialPIM.exe"
  Var path14$ = $ProgDir + "Tools\LibreOfficePortable\LibreOfficePortable.exe"
  Var path15$ = $ProgDir + "Tools\ImgBurn\ImgBurn.exe"
  Var path16$ = $ProgDir + "Tools\mp3tagPortable\Mp3tag.exe"
  Var path17$ = $ProgDir + "Tools\CDexPortable\CDexPortable.exe"
  Var path18$ = $ProgDir + "Tools\winLAMEPortable\winLAMEPortable.exe"
  Var path19$ = $ProgDir + "Tools\FFSJ_Lite_v3.3\FFSJ_Lite_v3.3.exe"
  Var path1A$ = $ProgDir + "Tools\AIMPPortable\AIMPPortable.exe"
  Var path1B$ = $ProgDir + "Tools\IrfanViewPortable\IrfanViewPortable.exe"
  Var path1C$ = $ProgDir + "Tools\VLCPortable\VLCPortable.exe"
  Var path1D$ = $ProgDir + "Tools\CCS64\CCS64.exe"
  Var path1E$ = $ProgDir + "Tools\WinUAE4400\winuae.exe"
  Var path1F$ = $ProgDir + "Tools\D-Fend Reloaded\DFend.exe"
  Var path20$ = $ProgDir + "Tools\exit.ico"
 
  hIcon00& = Create("hIcon", path00$, 0)
  hButton00& = Create("ICONBUTTON", %hWnd, hIcon00&, 0*x%, 0, x%, y%)
  hToolTip00& = Create("Tooltip", %hWnd, hButton00&, "freeBASIC 32Bit")
  hIcon01& = Create("hIcon", path01$, 0)
  hButton01& = Create("ICONBUTTON", %hWnd, hIcon01&, 1*x%, 0, x%, y%)
  hToolTip01& = Create("Tooltip", %hWnd, hButton01&, "freeBASIC 64Bit")
  hIcon02& = Create("hIcon", path02$, 0)
  hButton02& = Create("ICONBUTTON", %hWnd, hIcon02&, 2*x%, 0, x%, y%)
  hToolTip02& = Create("Tooltip", %hWnd, hButton02&, "PureBASIC 32Bit")
  hIcon03& = Create("hIcon", path03$, 0)
  hButton03& = Create("ICONBUTTON", %hWnd, hIcon03&, 3*x%, 0, x%, y%)
  hToolTip03& = Create("Tooltip", %hWnd, hButton03&, "PureBASIC 64Bit")
  hIcon04& = Create("hIcon", path04$, 0)
  hButton04& = Create("ICONBUTTON", %hWnd, hIcon04&, 4*x%, 0, x%, y%)
  hToolTip04& = Create("Tooltip", %hWnd, hButton04&, "SpiderBASIC")
  hIcon05& = Create("hIcon", path05$, 0)
  hButton05& = Create("ICONBUTTON", %hWnd, hIcon05&, 5*x%, 0, x%, y%)
  hToolTip05& = Create("Tooltip", %hWnd, hButton05&, "XProfan X4")
  hIcon06& = Create("hIcon", path06$, 0)
  hButton06& = Create("ICONBUTTON", %hWnd, hIcon06&, 6*x%, 0, x%, y%)
  hToolTip06& = Create("Tooltip", %hWnd, hButton06&, "XDatengeneratror zur Aufbereitung und Einfügen von Daten in das XProfan-Programm")
  hIcon07& = Create("hIcon", path07$, 0)
  hButton07& = Create("ICONBUTTON", %hWnd, hIcon07&, 7*x%, 0, x%, y%)
  hToolTip07& = Create("Tooltip", %hWnd, hButton07&, "ResourceHacker extrahiert Inhalte wie z.B. Icons aus Dateien oder schreibt sie hinein")
  hIcon08& = Create("hIcon", path08$, 0)
  hButton08& = Create("ICONBUTTON", %hWnd, hIcon08&, 8*x%, 0, x%, y%)
  hToolTip08& = Create("Tooltip", %hWnd, hButton08&, "PrivaZer ist kein Entwicklungs-Tools. Es räumt nur den PC auf.")
  hIcon09& = Create("hIcon", path09$, 0)
  hButton09& = Create("ICONBUTTON", %hWnd, hIcon09&, 9*x%, 0, x%, y%)
  hToolTip09& = Create("Tooltip", %hWnd, hButton09&, "Winrar 32Bit")
  hIcon0A& = Create("hIcon", path0A$, 0)
  hButton0A& = Create("ICONBUTTON", %hWnd, hIcon0A&, 10*x%, 0, x%, y%)
  hToolTip0A& = Create("Tooltip", %hWnd, hButton0A&, "Winrar 64Bit")
  hIcon0B& = Create("hIcon", path0B$, 0)
  hButton0B& = Create("ICONBUTTON", %hWnd, hIcon0B&, 11*x%, 0, x%, y%)
  hToolTip0B& = Create("Tooltip", %hWnd, hButton0B&, "VeraCrypt - ein Verschlüsselungsprogramm")
  hIcon0C& = Create("hIcon", path0C$, 0)
  hButton0C& = Create("ICONBUTTON", %hWnd, hIcon0C&, 12*x%, 0, x%, y%)
  hToolTip0C& = Create("Tooltip", %hWnd, hButton0C&, "gpg4usb - ein Verschlüsselungsprogramm für Dateien")
  hIcon0D& = Create("hIcon", path0D$, 0)
  hButton0D& = Create("ICONBUTTON", %hWnd, hIcon0D&, 13*x%, 0, x%, y%)
  hToolTip0D& = Create("Tooltip", %hWnd, hButton0D&, "Hex Editor MX")
  hIcon0E& = Create("hIcon", path0E$, 0)
  hButton0E& = Create("ICONBUTTON", %hWnd, hIcon0E&, 14*x%, 0, x%, y%)
  hToolTip0E& = Create("Tooltip", %hWnd, hButton0E&, "The Bard's Tale Triology - Eine Weiteretnwicklung für den PC")
  hIcon0F& = Create("hIcon", path0F$, 0)
  hButton0F& = Create("ICONBUTTON", %hWnd, hIcon0F&, 15*x%, 0, x%, y%)
  hToolTip0F& = Create("Tooltip", %hWnd, hButton0F&, "The Bard's Tale IV - Barrows of the Deep - Nach vielen Jahren die Fortsetzung")
  hIcon10& = Create("hIcon", path10$, 0)
  hButton10& = Create("ICONBUTTON", %hWnd, hIcon10&, 16*x%, 0, x%, y%)
  hToolTip10& = Create("Tooltip", %hWnd, hButton10&, "Kiwix - Wikipedia offline")
  hIcon11& = Create("hIcon", path11$, 0)
  hButton11& = Create("ICONBUTTON", %hWnd, hIcon11&, 17*x%, 0, x%, y%)
  hToolTip11& = Create("Tooltip", %hWnd, hButton11&, "FreeCommander - ein Filebrowser mit Doppelfenster")
  hIcon12& = Create("hIcon", path12$, 0)
  hButton12& = Create("ICONBUTTON", %hWnd, hIcon12&, 18*x%, 0, x%, y%)
  hToolTip12& = Create("Tooltip", %hWnd, hButton12&, "FireFox")
  hIcon13& = Create("hIcon", path13$, 0)
  hButton13& = Create("ICONBUTTON", %hWnd, hIcon13&, 19*x%, 0, x%, y%)
  hToolTip13& = Create("Tooltip", %hWnd, hButton13&, "EssentialPIM")
  hIcon14& = Create("hIcon", path14$, 0)
  hButton14& = Create("ICONBUTTON", %hWnd, hIcon14&, 20*x%, 0, x%, y%)
  hToolTip14& = Create("Tooltip", %hWnd, hButton14&, "LibreOffice")
  hIcon15& = Create("hIcon", path15$, 0)
  hButton15& = Create("ICONBUTTON", %hWnd, hIcon15&, 21*x%, 0, x%, y%)
  hToolTip15& = Create("Tooltip", %hWnd, hButton15&, "ImgBurn - Ein gutes Brennprogramm")
  hIcon16& = Create("hIcon", path16$, 0)
  hButton16& = Create("ICONBUTTON", %hWnd, hIcon16&, 22*x%, 0, x%, y%)
  hToolTip16& = Create("Tooltip", %hWnd, hButton16&, "mp3tag - mp3 mit Informationen und Covers versehen")
  hIcon17& = Create("hIcon", path17$, 0)
  hButton17& = Create("ICONBUTTON", %hWnd, hIcon17&, 23*x%, 0, x%, y%)
  hToolTip17& = Create("Tooltip", %hWnd, hButton17&, "CDEx - Rippt Audio-CDs in WAV oder mp3")
  hIcon18& = Create("hIcon", path18$, 0)
  hButton18& = Create("ICONBUTTON", %hWnd, hIcon18&, 24*x%, 0, x%, y%)
  hToolTip18& = Create("Tooltip", %hWnd, hButton18&, "winLAME - Rippt Audio-CDs und ändert Aptastraten von mp3")
  hIcon19& = Create("hIcon", path19$, 0)
  hButton19& = Create("ICONBUTTON", %hWnd, hIcon19&, 25*x%, 0, x%, y%)
  hToolTip19& = Create("Tooltip", %hWnd, hButton19&, "FFSJ_Lite_v3.3 teilt Dateien auf. Nützlich z.B. für Wikipedia.zim auf FAT32 weil Dateigröße beschränkt.")
  hIcon1A& = Create("hIcon", path1A$, 0)
  hButton1A& = Create("ICONBUTTON", %hWnd, hIcon1A&, 26*x%, 0, x%, y%)
  hToolTip1A& = Create("Tooltip", %hWnd, hButton1A&, "AIMP - Ein mp3-Player")
  hIcon1B& = Create("hIcon", path1B$, 0)
  hButton1B& = Create("ICONBUTTON", %hWnd, hIcon1B&, 27*x%, 0, x%, y%)
  hToolTip1B& = Create("Tooltip", %hWnd, hButton1B&, "IrfanView - Ein Bildbetrachter")
  hIcon1C& = Create("hIcon", path1C$, 0)
  hButton1C& = Create("ICONBUTTON", %hWnd, hIcon1C&, 28*x%, 0, x%, y%)
  hToolTip1C& = Create("Tooltip", %hWnd, hButton1C&, "VLC - Ein Video-Player")
  hIcon1D& = Create("hIcon", path1D$, 0)
  hButton1D& = Create("ICONBUTTON", %hWnd, hIcon1D&, 29*x%, 0, x%, y%)
  hToolTip1D& = Create("Tooltip", %hWnd, hButton1D&, "CCS64 - Ein c64-Emulator")
  hIcon1E& = Create("hIcon", path1E$, 0)
  hButton1E& = Create("ICONBUTTON", %hWnd, hIcon1E&, 30*x%, 0, x%, y%)
  hToolTip1E& = Create("Tooltip", %hWnd, hButton1E&, "WinUAE - Ein Amiga-Emulator für 64Bit")
  hIcon1F& = Create("hIcon", path1F$, 0)
  hButton1F& = Create("ICONBUTTON", %hWnd, hIcon1F&, 31*x%, 0, x%, y%)
  hToolTip1F& = Create("Tooltip", %hWnd, hButton1F&, "D-Fend - Oberfläche für ScummVM und DOSBox - Ein Emulator für alte Spiele")
  hIcon20& = Create("hIcon", path20$, 0)
  hButton20& = Create("ICONBUTTON", %hWnd, hIcon20&, 32*x%, 0, x%, y%)
  hToolTip20& = Create("Tooltip", %hWnd, hButton20&, "Diese Toolbar beenden")
 
   Whilenot e%
     WaitInput
       If Clicked(hButton00&)
         WINEXEC(path00$, 4)
       ElseIf Clicked(hButton01&)
         WINEXEC(path01$, 4)
       ElseIf Clicked(hButton02&)
         WINEXEC(path02$, 4)
       ElseIf Clicked(hButton03&)
         WINEXEC(path03$, 4)
       ElseIf Clicked(hButton04&)
         WINEXEC(path04$, 4)
       ElseIf Clicked(hButton05&)
         WINEXEC(path05$, 4)
       ElseIf Clicked(hButton06&)
         WINEXEC(path06$, 4)
       ElseIf Clicked(hButton07&)
         WINEXEC(path07$, 4)
       ElseIf Clicked(hButton08&)
         WINEXEC(path08$, 4)
       ElseIf Clicked(hButton09&)
         WINEXEC(path09$, 4)
       ElseIf Clicked(hButton0A&)
         WINEXEC(path0A$, 4)
       ElseIf Clicked(hButton0B&)
         WINEXEC(path0B$ + " /v serial.hc /l z /a", 4)
       ElseIf Clicked(hButton0C&)
         WINEXEC(path0C$, 4)
       ElseIf Clicked(hButton0D&)
         WINEXEC(path0D$, 4)
       ElseIf Clicked(hButton0E&)
        'Wenn AutoSave im Benutzerverzeichnis existiert, wird sie als "pimped.dat" in das Projektverzeichnis unter Bard's Tale Save kopiert
         If FileExists("C:\\Users\\mbark\\AppData\\LocalLow\\InXile Entertainment\\The Bard's Tale Trilogy\\saves\\AutoSave.dat") = 1
           COPY "C:\\Users\\mbark\\AppData\\LocalLow\\InXile Entertainment\\The Bard's Tale Trilogy\\saves\\AutoSave.dat" > $Drive + "\Projekte\\Bard's Tale Save\\pimped.dat"
         EndIf
         WINEXEC(path0E$, 4)
       ElseIf Clicked(hButton0F&)
         WINEXEC(path0F$, 4)
       ElseIf Clicked(hButton10&)
         WINEXEC(path10$, 4)
       ElseIf Clicked(hButton11&)
         WINEXEC(path11$, 4)
       ElseIf Clicked(hButton12&)
         WINEXEC(path12$, 4)
       ElseIf Clicked(hButton13&)
         WINEXEC(path13$, 4)
       ElseIf Clicked(hButton14&)
         WINEXEC(path14$, 4)
       ElseIf Clicked(hButton15&)
         WINEXEC(path15$, 4)
       ElseIf Clicked(hButton16&)
         WINEXEC(path16$, 4)
       ElseIf Clicked(hButton17&)
         WINEXEC(path17$, 4)
       ElseIf Clicked(hButton18&)
         WINEXEC(path18$, 4)
       ElseIf Clicked(hButton19&)
         WINEXEC(path19$, 4)
       ElseIf Clicked(hButton1A&)
         WINEXEC(path1A$, 4)
       ElseIf Clicked(hButton1B&)
         WINEXEC(path1B$, 4)
       ElseIf Clicked(hButton1C&)
         WINEXEC(path1C$, 4)
       ElseIf Clicked(hButton1D&)
         WINEXEC(path1D$, 4)
       ElseIf Clicked(hButton1E&)
         WINEXEC(path1E$, 4)
       ElseIf Clicked(hButton1F&)
         WINEXEC(path1F$, 4)
       ElseIf Clicked(hButton20&)
         'Wenn "pimped.dat" im Verzeichnis Bard's Tale Save existiert, wird sie auch als "pimped.dat" nach "C:\\Users\\mbark\\AppData\\LocalLow\\InXile Entertainment\\The Bard's Tale Trilogy\\saves\\pimped.dat" kopiert
         If FileExists($Drive + "\Projekte\\Bard's Tale Save\\pimped.dat") = 1
           COPY $Drive + "\Projekte\\Bard's Tale Save\\pimped.dat" > "C:\\Users\\mbark\\AppData\\LocalLow\\InXile Entertainment\\The Bard's Tale Trilogy\\saves\\pimped.dat"
         EndIf
         'Alle erstellten Objekte werden vor dem Beenden gelöscht
         DeleteObject hIcon00&, hButton00&, hToolTip00&
         DeleteObject hIcon01&, hButton01&, hToolTip01&
         DeleteObject hIcon02&, hButton02&, hToolTip02&
         DeleteObject hIcon03&, hButton03&, hToolTip03&
         DeleteObject hIcon04&, hButton04&, hToolTip04&
         DeleteObject hIcon05&, hButton05&, hToolTip05&
         DeleteObject hIcon06&, hButton06&, hToolTip06&
         DeleteObject hIcon07&, hButton07&, hToolTip07&
         DeleteObject hIcon08&, hButton08&, hToolTip08&
         DeleteObject hIcon09&, hButton09&, hToolTip09&
         DeleteObject hIcon0A&, hButton0A&, hToolTip0A&
         DeleteObject hIcon0B&, hButton0B&, hToolTip0B&
         DeleteObject hIcon0C&, hButton0C&, hToolTip0C&
         DeleteObject hIcon0D&, hButton0D&, hToolTip0D&
         DeleteObject hIcon0E&, hButton0E&, hToolTip0E&
         DeleteObject hIcon0F&, hButton0F&, hToolTip0F&
         DeleteObject hIcon10&, hButton10&, hToolTip10&
         DeleteObject hIcon11&, hButton11&, hToolTip11&
         DeleteObject hIcon12&, hButton12&, hToolTip12&
         DeleteObject hIcon13&, hButton13&, hToolTip13&
         DeleteObject hIcon14&, hButton14&, hToolTip14&
         DeleteObject hIcon15&, hButton15&, hToolTip15&
         DeleteObject hIcon16&, hButton16&, hToolTip16&
         DeleteObject hIcon17&, hButton17&, hToolTip17&
         DeleteObject hIcon18&, hButton18&, hToolTip18&
         DeleteObject hIcon19&, hButton19&, hToolTip19&
         DeleteObject hIcon1A&, hButton1A&, hToolTip1A&
         DeleteObject hIcon1B&, hButton1B&, hToolTip1B&
         DeleteObject hIcon1C&, hButton1C&, hToolTip1C&
         DeleteObject hIcon1D&, hButton1D&, hToolTip1D&
         DeleteObject hIcon1E&, hButton1E&, hToolTip1E&
         DeleteObject hIcon1F&, hButton1F&, hToolTip1F&
         DeleteObject hIcon20&, hButton20&, hToolTip20&
         e% = 1
       EndIf
   EndWhile
  End
 


Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   12.03.21 20:23

Vielleicht geht das mit einem Array von den Handles
etwas schneller. Das einzige, das du händisch machen
mußt, sind die Icons aus deinen .exe Dateien. Das kostet
riesig viel Zeit.

Hast du es auch schon mit einer Toolbar (Create("Toolbar",..) )
und einer Imageliste probiert ?

Solltest du auch Tooltips brauchen da gibt es auch eine API, mit
der du die auch auf einer Toolbar auf die Icons setzen kannst.

Unser verstorbener Andreas Miethe hatte mal was gemacht :

https://xprofan.net/intl/de/quelltexte/sprechblasen-toolbar-tooltip/

Ich würde vorschlagen, die Icons der .exe Dateien mit einem
separaten Programm einzulesen, auf eine große Speicher-
Bitmap nebeneinander zeichnen, und dann als Sammelbitmap
speichern ähnlich wie die Toolbar32.bmp. Diese kann man
dann auch als Ressource mit dem ResHacker in die Profan.exe und
prfrun32.exe speichern. Die ist dann schnell im Hauptprogramm in eine ImageListe geladen.

Das Gleiche kann auch für die Pfade zu den einzelnen .exe Dateien
geschehen. Ich nehme mal an, daß du so eine Art Schnellstarter
für deine häufig genutzten Programme machen willst.

Vorteilig wäre auch das, wenn sich die Pfade ändern, neu hinzukommen
oder gelöscht werden. Da bräuchte man nur die Stringressource und die
Toolbarbitmaps ändern und mit dem ResHacker neu zu speichern, dann
neu Compilieren und fertig.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (13.03.21 07:06)

Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Arndt Lindner (80.150.206.---)
Datum:   13.03.21 12:57

Leider kann ich den langsamen Aufbau der Toolbar nicht beobachten. Ich benutze XProfanX4, eine I5-7400 CPU und 16 GB RAM.
Den Vorschlag von Heinz Brill das ganze mit Arrays zu implementiern finde ich unabhängig von den Geschwindigkeitsproblem, zu dem ich nichts beitragen kann, sehr gut. Das Programm könnte beispielsweise so aussehen:
  'Hauptfenster erstellen
   WindowTitle "Launcher V1.0"                                           'Windowstitel festlegen
   WindowStyle 16 + 64 + 128                                             'Fenster ohne Meüleiste und ohne Min/Max/Close (Schließen nur über Exit möglich - Wert 128)
   Declare e%, x%, y%, i%
   x% = 36 : y% = 36                                                     'Größe der Icons und der Leiste
   Window %MaxX/2 - (33*y%)/2 ,2 - 33*x%, y%                             'Vollbild einstellen
 
   'Objekte für PictureButtons werden erstellt
   Declare hIcon&[], hButton&[], hToolTip&[]
   Var path$[] = "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe",\
                 "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe",\
                 "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe",\
                 "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe",\
                 "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe",\
                 "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe",\
                 "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe",\
                 "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe", "C:/xprofanx4/" + "xprofed.exe",\
                 "C:/xprofanx4/" + "xprofed.exe"
   Var tooltip$[] = "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit",\
                    "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit",\
                    "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit",\
                    "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit", "freeBASIC 32Bit",\
                    "freeBASIC 32Bit"
 
   for i%,0,$20
     hIcon&[i%] = Create("hIcon", path$[i%], 0)
     hButton&[i%] = Create("ICONBUTTON", %hWnd, hIcon&[i%], i%*x%, 0, x%, y%)
     hToolTip&[i%] = Create("Tooltip", %hWnd, hButton&[i%], tooltip$[i%])
   endfor
 
    Whilenot e%
      WaitInput
        for i%,0,$1F
          If Clicked(hButton&[i%])
            If i% = $0E
             'Wenn AutoSave im Benutzerverzeichnis existiert, wird sie als "pimped.dat" in das Projektverzeichnis unter Bard's Tale Save kopiert
              If FileExists("C:\\Users\\mbark\\AppData\\LocalLow\\InXile Entertainment\\The Bard's Tale Trilogy\\saves\\AutoSave.dat") = 1
                COPY "C:\\Users\\mbark\\AppData\\LocalLow\\InXile Entertainment\\The Bard's Tale Trilogy\\saves\\AutoSave.dat" > $Drive + "\Projekte\\Bard's Tale Save\\pimped.dat"
              EndIf
            Endif
            WINEXEC(path$[i%], 4)
          Endif  
        endfor
        If Clicked(hButton&[$20])
          'Wenn "pimped.dat" im Verzeichnis Bard's Tale Save existiert, wird sie auch als "pimped.dat" nach "C:\\Users\\mbark\\AppData\\LocalLow\\InXile Entertainment\\The Bard's Tale Trilogy\\saves\\pimped.dat" kopiert
          If FileExists($Drive + "\Projekte\\Bard's Tale Save\\pimped.dat") = 1
            COPY $Drive + "\Projekte\\Bard's Tale Save\\pimped.dat" > "C:\\Users\\mbark\\AppData\\LocalLow\\InXile Entertainment\\The Bard's Tale Trilogy\\saves\\pimped.dat"
          EndIf
          e% = 1
        Endif  
      endwhile  
        
     'Alle erstellten Objekte werden vor dem Beenden gelöscht
     for i%,0,$20     
       DeleteObject hIcon&[i%], hButton&[i%], hToolTip&[i%]   
     endfor  
   End
 

Für die Texte in path&[] und tooltip$[] habe ich nur Dummies eingetragen. Die müssen natürlich angepasst werden.

Arndt Lindner



Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Markus Barkholz (---.hsi05.unitymediagroup.de)
Datum:   13.03.21 18:01

Danke für die Tipps,
ich glaube das mit den Arrays werde ich gleich mal umsetzen. Es sieht auch irgendwie eleganter aus. Das könnte tatsächlich was bringen. Create("Toolbar hatte ich auch schon im Auge, gefiel mir aber mit den IconButtons irgendwie besser.

Übrigends benutze ich auch xProfan X4 aber dazu ein AMD Ryzen 3800G mit integrierter GPU. Die ist aber definitiv nicht langsam. Mein OGL-Demo rennt mit 100fps ohne Probleme. Und das ist grafische Darstellung und somit rechenintensiver. Deshalb wunderte mich der langsame Aufbau.

Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Markus Barkholz (---.hsi05.unitymediagroup.de)
Datum:   13.03.21 18:46

So, habe eure Tipps einmal ausprobiert. Es ist tatsächlich schneller mit der Array-Methode. Leider werden jetzt zufällige und mehrere Icons verschluckt. Scheint jetzt wohl zu schnell beim Auslesen der Icons zu sein. Ich behalte so meine Version bei auch wenn sie etwas langsamer ist da sie ja funktioniert.

Ich danke euch trotzdem für die Tipps.

Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   13.03.21 19:13

Wie schon gesagt : Die Plattenzugriffe, um die Icons zu extrahieren,
machen das beim Start langsam. Wenn du die Toolbar bzw. Picbuttons
zum 2. Mal startest, hat Windows die Pfade bereits im Zugriff gehabt
und deswegen geht es dann auch schneller.

Das Verhalten merke ich auch bei anderen Programmen, die datei-
lastig sind. Ist aber ganz normal und hat weniger mit der CPU oder
GPU zu tun.

Um das zu optimieren würde ich vorher die Icons extrahieren.
Wenn du das nicht selber programmieren willst, da gibt es bestimmt
auch Grafikprogramme, die das machen und anschließend eine große
Bitmap daraus erstellen.

Diese kannst du dann in eine Imagelist laden und deine Icon Buttons
daraus erstellen.

Und da, wo viele Variablen nötig sind, lieber Listen (Arrays, int. Listboxliste
usw.) verwenden. Die sind im Zugriff schneller.

Auch deine Pfade könntest du mit CHDIR und AddFiles("*.exe") organisieren
bzw. in ein Array schieben. Und mit den Move Befehlen und MoveListProc
läßt sich da auch manche Automation erreichen.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Arndt Lindner (80.150.206.---)
Datum:   13.03.21 22:33

Mir ist aufgefallen, dass die Toolbar sich recht langsam aufbaut, wenn man sie in den Autostart einbaut. Starte ich die exe direkt, dann geht es schnell. Vielleicht liegt hier Optimierungspotential?

Arndt Lindner



Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   14.03.21 09:43

Hier habe ich mal was gemacht, wie sowas aussehen könnte :
 Declare Handle hIcon, ImgList, TB, String Pfade[], Pfad, Int ende
 
 Window 800, 400
 chdir "c:\Sprachen\XProfanX4\"
 AddFiles "*.exe"
 ImgList = Create("ImageList", 32, 32)
 Pfad = "C:\Sprachen\xprofanx4\"
 
 WhileLoop 0, GetCount(0) - 1
  hIcon = Create("hIcon", Pfad + GetString$(0, &LOOP), 0)
  Case hIcon : ImageList("AddIcon", ImgList, hIcon)
 EndWhile
 ImageList("AddIcon", ImgList, Create("hIcon", Pfad + "Exit.ico", 0)) ' Hier Pfad anpassen !!!
 Move("ListToArr", Pfade[]) ' zum späteren Ausführen der Programme
 TB = Create("Toolbar", %HWnd, ImgList, GetCount(ImgList), 0, 2000, 1)
 
 ende = 0
 WhileNot ende
   WaitInput
   If %KEY = 2
      ende = 1
   ElseIf %KEY = 4
     SetWindowPos TB = 0, 0 - 0, 0; 0
   ElseIf MenuItem(2000)
     ' Ausführen der Programme
     WINEXEC(Pfade[0], 4)  
   ElseIf MenuItem(2001)
     WINEXEC(Pfade[1], 4) 
   ElseIf MenuItem(2002)
     WINEXEC(Pfade[2], 4)  
   ElseIf MenuItem(2003)
     WINEXEC(Pfade[3], 4)  
   ElseIf MenuItem(2004)
     WINEXEC(Pfade[4], 4)  
   ElseIf MenuItem(2005)
     WINEXEC(Pfade[5], 4) 
   ElseIf MenuItem(2006)  
     WINEXEC(Pfade[6], 4)  
   ElseIf MenuItem(2007)
     WINEXEC(Pfade[7], 4)
   ElseIf MenuItem(2008)
     WINEXEC(Pfade[8], 4) 
   ElseIf MenuItem(2000 + GetCount(ImgList) - 1)  ' EXIT - Icon gedrückt
     ende = 1
   EndIf
 EndWhile
 DeleteObject ImgList
 End
 


Die Tooltipps fehlen noch. Das ist aber auch kein Problem.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (14.03.21 09:48)

Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Markus Barkholz (---.hsi05.unitymediagroup.de)
Datum:   14.03.21 19:49

Ja, da ist noch Potential nach oben. Habe heute noch etwas optimiert. Das mit den Icons extrahieren hatte ich auch schon im Auge. Für den ersten Test war das aber schon ganz gut.

Mir ist da aber noch etwas aufgefallen:

Heute war auf meiner Arbeit nichts zu tun und ich konnte mich meinen privaten Dingen widmen. Habe also etwas optimiert und einige Tools hinzugefügt. Einige portable Anwendungen lassen sich einfach nicht über meine ToolBar starten. Weder über WinExec, Shell oder Run waren diese zum Start zu übereden. Während sie per Doppelklick problemlos gestartet werden können. Das finde ich etwas ungewöhnlich da sich eigentlich alle von mir ausgewählten externen Programme unter PureBASIC problemlos starten lassen. Nur ebend unter xProfan nicht.

Woran mag das liegen? Gibt es noch eine andere Option ein Programm über xProfan zu starten, z.B. über API?

Beitrag beantworten
 
 Re: ToolBar meiner Programme zu langsam
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   15.03.21 08:07

Roland wird wohl auch die API zum Aufrufen verwenden.
Was gibt denn WinExec() zurück ?
Beim Aufruf von x% = WinExec(...) wird x% entweder mit der
Prozess-ID oder mit einer Fehlernummer bestückt.

ShellExec mit der Option "open" könntest du auch mal probieren.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org