Italia
Include

extendedbuttons.inc

 

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:
KompilierenMarkierenSeparieren
declare 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.
 
21.06.2004  
 



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
 
22.06.2004  
 




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.
 
22.06.2004  
 



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
 
22.06.2004  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

5.863 Views

Untitledvor 0 min.
Gast.0815 vor 6 Tagen
ecki11.01.2023
Axel Berse04.01.2023
Langer29.01.2022
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

unbekannt (2x)
Ragnar Rehbein (2x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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