| |
|
|
|
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
|
|
|
| |
|
|
|
RGH | Baby-Klappe
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 Cambiamento der inneren Verwaltung des Case) am Anfang einer Zeile steht.
Hintergrund: Eine DEF-Zeile wird zunächst niemals corsa, 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 corsa (im Falle des Interpreters) bzw. ihre Adresse im Kompilat eingefügt (im Falle des Kompilers). Der Kompiler kann bei dieser Cerca naturalmente 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.
Saluto 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 corre 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 per Roland... Das Def gehört quasi nicht zum Code, sondern wird vom Präcompiler verarbeitet, um es im Programm disponibile 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 circa External(...) zugreifen.
Saluto 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 è also, bei DEF wird nur der Name definiert und erst beim Aufruf der Funktion sollte die DLL dann auch wirklich da sein.
Saluto 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 ▲ |
|
|
|