Include | | | | Ragnar Rehbein | Kurze Einleitung zur extendedbuttons.inc ich gehöre zu der zwar kleinen aber hartgesottenen gemeinde die Visual Windows Prof. 2 zur programmentwicklung nicht missen möchten. alle projetkte die eine oberfläche haben werden mit VWP2 erstellt. es könne beliebig fensterelemente erstellt umbenannt verschoben werden etc. ohne in irgendeiner weise in den quelltest eingreifen zu müssen. aber auch per die fangemeinde des Object Creator 4.1 kann diese include nützlich sein. leider sind die möglichkeiten zur buttongestaltung recht eingeschränkt. mit der skcontrol.dll hat man dagegen tolle möglichkeiten. die benutzung bedeutet jedoch jedesmal manuellen eingriff in den quelltext, wenn ein element verschoben oder in der größe geändert wird.
meine idee war nun folgende: ich habe eine include geschrieben, die ein überblenden von beliebigen controls ermöglicht.
man erstellt also wie gewohnt (z.b. mit VWP2) seine oberfläche mit den buttons. z.b. kann man nun mit extbut#.hoverbutton(addr(Button1&)) aus dem button1 eine hoverbutton zaubern. die methode bekommt die adresse der variablen übermittelt, die das handle von button1 enthält. sie stellt dann die größe und lage des button1 fest. dann wird der buttontext geholt. dann wird der button1 zerstört. dann wird mit der skcontrol.dll ein hoverbotton an der gleichen position und identischer größe erstellt. und zu guter letzt wird das neue handle in der alten variablen button1& gespeichert. ich kann also weiter mit der variablen button1& arbeiten, die nun das handle des hoverbuttons enthält.
ich kann also bei einem programm das 10 buttons hat durch das hinzufügen von nur 13 zeilen quelltext, aus allen buttons hoverbuttons machen. das aussehen bleibt unverändert, kein quelltext muß geändert werden.
verschiebe ich buttons in meiner entwicklungsumgebung oder ändere größen, wirkt sich das sofort ohne weiteren aufwand auf die hoverbuttons aus. nach dem prinzip kann ich beliebige elemente, die nur als platzhalter dienen mit anderen selbst definierten überblenden. auch per die positionierung von listviews mit franks listview.dll hervorragend geeignet !!
nachfolgend den quelltext und einen kurzen codeschnipsel per die syntax. KompilierenMarkierenSeparieren $I SKControl.inc
Def GetWindowRect(2) !"USER32", "GetWindowRect"
Def GetWindowRgn(2) !"USER32", "GetWindowRgn"
DEF MapWindowPoints(4) ! "USER32", "MapWindowPoints"
Def GetSysColor(1) !"USER32","GetSysColor"
class extbuttons = bcolor&, farbe des buttons
tcolor&, farbe der schrift
hfont&, fonthandle von create font
x&, koordinate
y&,
sx&, breite des buttons
sy&,
skdll_init@,
skdll_deinit@,
hskdll&,
get_bdimension@, buttondimension ermitteln und umrechnen rückgabe gettext des buttons
hoverbutton@,
colorhoverbutton@,
colorhoverimagebutton@,
setcolor@,
setfont@,
dateedit@
proc extbuttons.skdll_init
declare .hskdll&
.hskdll& = UseDll("SKControl.dll")
if .hskdll& = 0
MessageBox("SKControl.dll konnte nicht geladen werden","Fehler",48+4096)
end
endif
SKCtrl_InitDll() Dll initialisieren...
endproc
----------------auf jeden fall vor beenden des programms ausführen--------------
proc extbuttons.skdll_deinit
SKCtrl_DeInitDll()
FreeDll .hskdll&
endproc
--------------nur ne hilfsfunktion-----------------------------------------
proc extbuttons.get_bdimension
parameters bhadr&
declare bh&,bt$,adr&,b#
dim b#,16
bh& = long(bhadr&,0)
GetWindowRect(bh&,b#)
MapWindowPoints(0,%hwnd,b#,2)
bt$ = gettext$(bh&)
DestroyWindow(bh&)
.x& = Long(b#,0)
.y& = Long(b#,4)
.sx& = Long(b#,8)-Long(b#,0)
.sy& = Long(b#,12)-Long(b#,4)
dispose b#
return bt$ buttontext
endproc
-----------um farben für colorbutton zu setzen, gilt dann für alle nachfolgenden buttons---------
proc extbuttons.setcolor
parameters tcolor&,bcolor&
.tcolor& = tcolor&
.bcolor& = bcolor&
endproc
----------------erklärt sich wohl alleine----------------------------------
proc extbuttons.setfont
parameters font$,höhe&,breite&,fett&,kursiv&,unterstrichen&
.hfont& = CreateFont("Arial",höhe&,breite&,fett&,kursiv&,unterstrichen&)
endproc
----------------------------------------------------------------------------
proc extbuttons.hoverbutton
parameters bhadr& speicheradresse des buttonhandles
declare bt$
bt$ = .get_bdimension(bhadr&)
long bhadr&,0=SKCtrl_CreateHoverButton(%hwnd,addr(bt$),.x&,.y&,.sx&,.sy&, %hInstance)
setfont long(bhadr&,0),.hfont&
endproc
----------------------------------------------------------------------------
proc extbuttons.colorhoverbutton
parameters bhadr& speicheradresse des buttonhandles
declare bt$
bt$ = .get_bdimension(bhadr&)
long bhadr&,0=SKCtrl_CreateClrHoverButton(%hwnd,addr(bt$),.tcolor&,.bcolor&,.x&,.y&,.sx&,.sy&, %hInstance)
setfont long(bhadr&,0),.hfont&
endproc
------------------imagehandle& ist optional--------------------------------
proc extbuttons.colorhoverimagebutton
parameters bhadr&,image$,pos&,imagehandle& speicheradresse des buttonhandles
declare bt$,ico&,hndl&
bt$ = .get_bdimension(bhadr&)
case right$(lower$(image$),4) = ".ico" : ico& = 1
case pos& = 1 : .sx& = -.sx& rechts daneben
case pos& = 2 : .sy& = -.sy& unten
if pos& = 3 oben
.sx& = -.sx&
.sy& = -.sy&
endif
if imagehandle& <> 0
hndl& = 1 noch nicht fertig
else
imagehandle& = addr(image$)
endif
long bhadr&,0=SKCtrl_CreateClrHvrImageButton(%hwnd,imagehandle&,addr(bt$),ico&,hndl&,.tcolor&,.bcolor&,.x&,.y&,.sx&,.sy&, %hInstance)
setfont long(bhadr&,0),.hfont&
endproc
-------------------------------macht aus einem bel. control ein dataedit----------------
proc extbuttons.dateedit
parameters bhadr&
.get_bdimension(bhadr&)
long bhadr&,0 = Create("DateEdit",%hwnd class=s3>"",.x&,.y&,.sx&,.sy& )
endproc
auszug zur anwendung: KompilierenMarkierenSeparierendeclare extbut#
dim extbut#,extbuttons
..... buttondefinitionen etc.
Proc Form1OnInit
extbut#.skdll_init()
EndProc
Proc Form1OnShow
extbut#.setcolor(0,getsyscolor(15)+rgb(10,10,10))
extbut#.setfont("Arial",16,0,0)
extbut#.hoverbutton(addr(Button1&))
extbut#.colorhoverimagebutton(addr(Button2&),"liste.ico")
extbut#.colorhoverimagebutton(addr(Button3&),"liste.ico")
extbut#.colorhoverimagebutton(addr(Button4&),"leer.ico")
EndProc
circa ein feedback würde ich mich freuen. auch fragen zu VWP2 beantworte ich gern.
r.r. |
| | | | |
| | | Hmmm klinkt toll, also entweder bin ich mächtig beschränkt, oder einfach nur nicht up-to-date. Ich schnalle an manchen Argomenti hier wirklich garnix. Sei mir nicht böse deshalb, aber ich habe nicht wirklich kappiert wie ich diese Inc nutzbringend anwende, also ich meine soll die inc was daran ändern, das man nach-wie-vor seine Buttons einfach anlegt wie bisher? Ich glaube die Inc birgt etwas Geniales insich, aber ich begreife es nur nicht.
Nixkappier, iF |
| | | | |
| | Ragnar Rehbein | ich weiß ja nicht, wie du deine buttons anlegst ? wenn du alles nur hard codiert inkl. der koordinaten in den quelltext reinhämmerst, brauchst du die inc nicht. wenn du jedoch mit einem tools, deine oberflächen quasi per drag and drop erstellst (z.b. mit VWP2, so in delphi), wirst du feststellen, daß die möglichtkeiten der vorhanden controls nicht immer ausreichen. mit dieser inc erhält man sich die möglichkeit das gesamte projekt immer voll grafisch editieren zu können, jedoch eigene controls zu benutzen. die buttons dienen quasi nur als platzhalter, die zur laufzeit ausgetauscht werden. die eigenschaften der erstellten controls werden vererbt und die eltern dann gekillt . ich kenne mit xprofan keine einfachere methode um schnell und flexibel !!! oberflächen zu erstellen.
r.r. |
| | | | |
| | | Argh jetzt habs ichs verstanden. Nunja, klar, also ich bin so ein Code-Einhämmerer wie Du ja so schön meintest, Controls mit einer GUI erstellen/positionieren ist per mich ein Grauß. Das ist per mich vergleichbar mit dem Arbeiten mit Frontpage & Co. um Htmls zu erstellen, was mir auch nicht in den Kopf gehen mag. Da lob ich mir die Präzision von Notepad.
Spielt hier aber keine Rolle, ich habe Sinn und Bedeutung Deiner Inc jetzt verstanden (ich weiß auch das das nix mit GUI zu tun hat), und diese auch ausprobiert. Ich finde die Idee supahh!
iF |
| | | | |
|
AnswerThemeninformationenDieses Thema hat 2 subscriber: |