VERSION 1.4
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
  1. Nur noch eine Variable anstatt 4 für ein Control benötigen
  2. Sehr viele Zeilen Code gespart haben
  3. Ein Control wie es üblich ist erstellen (also nur noch eine Zeile + dahinter die Variablenzuordnung)

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

Viel Spass mit diesen neuen Controls wünscht
Rolf Koch