Deutsch
Quelltexte/ Codesnippets

Farbig Progressbar Prozentbalken Uxtheme

 

Source wurde am 10.09.2007 in die Babyklappe auf XProfan.Com abgelegt:
Declare P1&,P2&,Channel&,Button&,Ende&
Case @FileExists($SysPath +//uxtheme.dll):Def Setwindowtheme(3) !uxtheme.dll, SetWindowTheme

Proc Disablexptheme

    Parameters Hwnd&
    Declare W#
    Dim W#, 2
    Setwindowtheme(Hwnd&, W#, W#)
    Dispose W#

Endproc

Def SetProgressPos(2) SendMessage(&(1),$0402,&(2),0)
Def SetProgressRange(3) SendMessage(&(1),$0401,0,MakeLong(&(2),&(3)))
Def SetProgressRange32(3) SendMessage(&(1),$0406,&(2),&(3))
Def PBM_SetBarColor(2) SendMessage(&(1),$0409,0,&(2))
Def PBM_SetBkColor(2) SendMessage(&(1),$2001,0,&(2))
window 0,0-250,150
cls
P1&=Control(msctls_progress32,,$50000000,30,10,200,10,%hwnd,2000,%hinstance)
P2&=Control(msctls_progress32,,$50000000,30,25,200,10,%hwnd,2001,%hinstance)
Case @FileExists($SysPath +//uxtheme.dll):Disablexptheme(p1&)
Case @FileExists($SysPath +//uxtheme.dll):Disablexptheme(p2&)
Button& = Create(Button,%hwnd,Ende,30,50,80,24)
Peak von 0 - max 32768
SetProgressRange(P1&,0,32786)
SetProgressRange(P2&,0,32768)
SetProgressPos(P1&,20000)
SetProgressPos(P2&,20000)
PBM_SetBarColor(P1&,@RGB(256,0,0))    Anzeige in rot
PBM_SetBarColor(P2&,@RGB(256,256,0))  Anzeige in gelb

whilenot Ende&

    waitinput
    Case Clicked(Button&) : End

wend

Viele Grüße aus Bangkok
Dieter
 
10.09.2007  
 




RGH
Baby-Klappe
...
Case @FileExists($SysPath +//uxtheme.dll):Def Setwindowtheme(3) !uxtheme.dll, SetWindowTheme
...


Diese Zeile (DEF nach CASE-Ausdruck) kann nicht funktionieren:
Vor XProfan 8: Das DEF wird nie gefunden, da es nicht am Anfang einer Zeile steht.
Ab XProfan 8: Das DEF wird immer gefunden, da es hier (durch Änderung der inneren Verwaltung des Case) am Anfang einer Zeile steht.

Hintergrund:
Eine DEF-Zeile wird zunächst niemals ausgeführt, da sie eben eine Definition ist, auf die möglicherweise später zugegriffen wird. Erst dann, wenn der Name der definierte Funktion oder Konstante im Programmcode vorkommt, wird nach ihrer Definition gesucht und diese ausgeführt (im Falle des Interpreters) bzw. ihre Adresse im Kompilat eingefügt (im Falle des Kompilers). Der Kompiler kann bei dieser Suche natürlich keinen CASE- oder IF-Ausdruck auswerten, da dieser erst zur Laufzeit bekannt sein wird. Praktisch wir das Programm ab der ersten Zeile durchsucht, wo diese Definition vorkommt und die entsprechende Adresse ermittelt.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
10.09.2007  
 




Dieter
Zornow
Hallo Roland,

wie du ja schreibst läuft das Programm ab 8.0. Sind deine Ausführungen so zu interpretieren, dass das Case ohne Wirkung bleibt und auch eine If ... Def endif Konstruktion ohne Abfrage bleibt und in jedemfall gelesen wird.

Viele Grüße aus Bangkok

Dieter
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
11.09.2007  
 




Jörg
Sellmeyer
Ich antworte mal einfach für Roland...
Das Def gehört quasi nicht zum Code, sondern wird vom Präcompiler verarbeitet, um es im Programm verfügbar zu machen.
Bedingte Definitionen könntest Du mit den Compilerschalter $IFDEF ... erreichen, aber auch nicht zur Laufzeit, sondern nur bei der Erstellung des Programms.
Besonders in diesem Fall bringt das Case ja auch nichts, da ja die Prozeduren sowieso im Code sind und dort dann ohne die definierte Funktion ziemlichen Mist produzieren könnten.
Definitionen also einfach an den Anfang des Programms und fertig.
Wenn dann kannst Du auf eine Funktion, die Du nur einmal brauchst, besser über External(...) zugreifen.

Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
11.09.2007  
 




Michael
Wodrich
@Dieter:
Wenn Du einmal am Anfang auf die DLL prüfst und das Ergebnis in einer Variable vermerkst (z.B. uxTheme%=1) wird Dein Programm schneller laufen.

Da Du das Einbinden nicht verhindern kannst, stelle die Definitionen alle an den Programmanfang.

Case uxTheme% : Funktion()
würde dann der Aufruf sein, wenn DLL vorhanden.

Meines Wissens fällt das Programm bei DEF und fehlender DLL nicht auf die Nase. Erst wenn die Funktion aufgerufen wird und die DLL fehlt, dann gibts einen Abflug.

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
11.09.2007  
 




RGH
Michael Wodrich
Meines Wissens fällt das Programm bei DEF und fehlender DLL nicht auf die Nase. Erst wenn die Funktion aufgerufen wird und die DLL fehlt, dann gibts einen Abflug.


Korrekt!

Mit DEF wird die DLL dynamisch gelinkt. Das heißt also, bei DEF wird nur der Name definiert und erst beim Aufruf der Funktion sollte die DLL dann auch wirklich da sein.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
11.09.2007  
 




Dieter
Zornow
Wenn das so ist, kann man sich das case vor dem Def schenken, Ich hatte aber mal bei einer Dll eine Funktion aufgerufen, Sommer und Winterzeit betreffend, diese Funktion gibt es unter XP nicht mehr in der Form in der Dll. Dabei wurde der Fehler in der Def Zeile angezeigt, dass die Funktion nicht gefunden wurde, deshalb dachte ich dass die Dll bereits in der Def Zeile abprüft wird. Ich wollte ausschließen, dass es bei kleineren Windowsversionen zu dieser Meldung kommt.

Viele Grüße aus Bangkok

Dieter
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
11.09.2007  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

7.611 Betrachtungen

Unbenanntvor 0 min.
Axel Berse16.07.2021
Michael W.28.10.2020
Stephan Sonneborn20.05.2020
Matzbub29.12.2018
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie