Per UPDOWN.INC und UPDOWN.DLL einfach ausklappbare Controls im XP Stil erstellen und kontrollieren. © by Rolf Koch - Rokosoft - Koblenz – 01/2004 http://www.rokosoft.de webmaster@rokosoft.de Über eine Erwähnung bei Gebrauch in Ihrem Programm wäre ich sehr erfreut. Ich übernehme keine Haftung für den Einsatz dieses Codes! |
Neues in Version 1.4: Code kmpl. überarbeitet, so daß Sie
Einleitung: Zur Zeit stehen 3 verschiedene Farben in der beiliegenden Dll zur Verfügung: BLAU HELLGRAU DUNKELGRAU ![]() Wenn Sie nicht Grafiken aus der Dll nutzen möchten, so setzen Sie vor den Befehl zum Erstellen der Controls Set_Bitmaps (siehe unten). |
Wichige Aufrufe: $I UPDOWN.INC ' Dies muss immer an den Codeanfang. (Es wird die beiliegende Dll genutzt - wechseln Sie evtl. vor $I UPDOWN.INC) in den aktuellen DLL Pfad!) (WINDOWSTYLE 63+512 ) evt. +512 wegen Getmessage und Systemkreuz (das Programm muss korrekt beendet werden) AB Profanversion 7.0 können Sie auch anstatt +512 folgendes benutzen um systembedingtes Ende abzufragen: Vor die Whileschleife usermessages 16 und anstatt case %key,2 einfach innerhalb der Abfragen case %umessage=16:Ende%=1 wobei hier Ende% die Schleifenbedingung wäre. ...... hier werden die Objekte wie Standart oder UP'N'DOWN erstellt. (siehe unten) ...... WHILE ..... GETMESSAGE ' UP'NDOWN funktionieren nur mit Getmessage und nicht mit Waitinputbefehlen! If ..... Elseif .... Endif .... CHECK_UPDOWN Variable& 'Die Abfragen: (Ein und Ausklappen) Variable& = Ermittelte Variable nach Up'n'Down Erstellung ..... WEND DEINIT_UPDOWN 'AUCH SEHR WICHTIG |
Die Erstellung: DOWNCONTROL X,Y,B,H,T,HWND,ART,AKTFARBE,INAKTFARBE,M X = An dieser X-Position wird das Control erstellt Y = An dieser Y-Position wird das Control erstellt B = Das Control hat eine Breite von B H = Das Control hat eine Höhe von H HWND = Das Hintergrundhandle (z.Zt. nur mit %HWND getestet) ART = 1,2,3 1 = Hellgrau 2 = Blau 3 = Dunkelgrau AktFarbe = Eine RGB(X,X,X) Farbe für den aktiven Titelleistentext (wenn ausgeklappt) InaktFarbe= Eine RGB(X,X,X) Farbe für den inaktiven Titelleistentext (wenn verkleinert) M= Wird nach Erstellung bei 0 = Verkleinert dargestellt 1 = Ausgeklappt dargestellt Um auf den einzelnen Controls andere Objekte darzustellen (schön sieht es mit der SKCONTROL.DLL von Sebstian König aus) nutzen Sie die nach DOWNCONTROL ermittelte LongInt Variable: DOWNCONTROL ............ let Objekt1& = @&(0) nun können Sie auf das erste Control andere Objekte wie z.B. folgt darstellen: let Edit1&(Objekt1&,"",10,30,120,20) Beachten Sie, das andere Objekte die Y-Pos (hier 30) grösser als 25 beinhalten, da Downcontrol eine Titelleiste von 23 besitzt. Hinweis: ART ist bei Laden von Bitmaps direkt aus einer Datei zwar unwichtig, geben Sie aber einen Wert (1-3) an. Das Control wird nur bei Einhaltung der richtigen Parameter korrekt dargestellt (abgefragt)! Wenn Sie die Bilder nicht aus der beiliegenden Dll, sondern von der Platte laden möchten dann setzen Sie vor DOWNCONTROL: SET_BITMAPS 1,2,3,4 PARAMETER: 1 = Bitmap welches als Titelleiste dienen soll (Pixelgrösse egal am besten jedoch teilbar durch 2) 2 = Bitmap welches die ausgeklappte Fläche anzeigt (wie 1) 3 = Bitmap welches den nach oben zeigenden Pfeil anzeigt (18 x 18 Pixel) 4 = Bitmap welches den nach unten zeigenden Pfeil anzeigt (18 x 18 Pixel) Dieser Befehl darf nur vor DOWNCONTROL, wenn er nicht vor DOWNCONTROL steht, wird weiter die Dll verwendet. Achtung: Es wird nicht auf Probleme wie fehlende Bitmaps o.ä. Überprüft. Dies sollten sie wie bei allen Grafikbefehlen bedenken. Wechseln Sie zur Not vor SET_BITMAP in den Grafikpfad und evtl. danach wieder zurück. Beispiel: SET_BITMAP DATEI1,DATEI2,DATEI3,DATEI4 DOWNCONTROL ....... (trotzdem mit allen Parametern) |
Die Abfrage: Mit Abfrage ist hier das Vergrössern und Verkleinern des Controls gemeint. Setzen Sie nach GETMESSAGE (siehe Beispielcode) einfach für jedes erstellte Controlhandle: CHECK_UPDOWN OBJEKT1& CHECK_UPDOWN OBJEKT2& ...... (ObjektX& steht hier für das obige Beispiel let Objekt1& = @&(0) ) |
Das Bereinigen: An den Schluss des Codes müssen Sie folgendes sezten: DEINIT_UPDOWN |
kurzer Beispielcode (alle wichtigen Befehle) Declare Obj1&,Obj2&,ENDE%,Endebutt& $I UPDOWN.INC WINDOWSTYLE 63+512 CLS LET ENDEBUTT&=Control("BUTTON","Beenden",$54018000,10,400,120,20,%hwnd,0,%hinstance) 'Hier bei Bedarf SET_BITMAPS ..... (um Bilder von Platte zu laden) DOWNCONTROL 10,10,190,190,"Testcontrol 1",%HWND,1,RGB(0,0,0),RGB(255,0,0),1 obj1&=&(0) 'wenn dieses wieder Bitmaps aus Dll kein SET_BITMAPS DOWNCONTROL 220,10,220,190,"UP'N'DOWN CONTROL Nr.2",%HWND,2,RGB(255,255,255),RGB(128,255,255),1 obj2&=&(0) WHILENOT ENDE% GETMESSAGE if getfocus(endebutt&) let ende%=1 endif CHECK_UPDOWN obj1& CHECK_UPDOWN obj2& WEND DEINIT_UPDOWN |