Deutsch
Wünsche und Anregungen

Erledigt: Einige meiner Lieblingshelfer in XProfan

 
Ich schreib hier mal einfach frech einige meiner Lieblingshelferfunktionen hin. Jede dieser Funktionen ist mir persönlich sehr wichtig und hat sich im XProfanalltag bewährt. Welche davon tatsächlich wie übernommen wird (wenn überhaupt) spielt für mich nur eine Nebenrolle. Hab auch ein paar Rems angefügt:
KompilierenMarkierenSeparieren
dulcoiF{settimer 1;waitinput;killtimer}// hierfür eine andere Lösung wäre angebracht
stri(float f){;return substr$(str$(f),1,.);}//ohne decimals verstellen zu müssen ohne .
valsubstr(string s,long p,string d){;return val(substr$(s,p,d));}
setsubstr(string s,long n,string d,ns){return ins$(ns,del$(s,n,1,d),n,d)}
lastsubstr(string s,d){return (substr$(s,len(s,d),d))}
notlastsubstr(string s,d){return del$(s,len(s,d),1,d)}
getfnamefromcmdstring(string s){return lastsubstr(s,\)}
getfpathfromcmdstring(string s){return notlastsubstr(s,\)+\}

getfileext(string fle){

    casenot instr(.,fle):return
    return lastsubstr(fle,.)

}

getTextWidth(string text,long xx){

    if pcount==1 {

        mem mem:=8
        GetTextExtentPoint32(hdc,Addr(text),len(text),mem)
        long result:=long(mem,0)
        dispose mem
        return result

    } else {

        long l:=getTextWidth(text)
        case l<=xx : return text
        text:=text+...

        whilenot l<=xx {

            case len(text)==4 : break
            text:=del$(text,len(text)-3,1)
            l:=getTextWidth(text)

        }

        return text

    }

}

tsnd(long v){//setzt Tausenderpunkte

    string s:=stri(v)
    long l:=len(s)
    long t:=(l-1)3

    whileloop t {s:=ins$(.,s,l-loop*3+1)}

    return s

}

stringescape(string s){//oft gebraucht wenn man z.B. mehrzeilige Texte in nur einer Zeile abspeichern möchte

    s:=translate$(s,\,\\)
    s:=translate$(s,chr$(10),\n)
    s:=translate$(s,chr$(7),\t)
    s:=translate$(s,chr$(9),\t)
    s:=translate$(s,chr$(32),\s)
    s:=translate$(s,chr$(34),\q)

    whileloop 31 {s:=translate$(s,chr$(loop),)}

    return s

}

stringunescape(string s){

    s:=translate$(s,\\,chr$(1))
    s:=translate$(s,\n,
    )
    s:=translate$(s,\t,	)
    s:=translate$(s,\s, )
    s:=translate$(s,\q,q)
    s:=translate$(s,chr$(1),\)
    return s

}

__secure_filename_(string fle) {//allowedchars sollte aus einem frei definierbaren String bezogen werden können.

    string allowedchars:= abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÖÄÜöäüß0123456789
    string n,nc
    long c:=len(fle)

    whileloop c {

        nc:=mid$(fle,loop,1)

        if instr(nc,allowedchars) {n:=n+nc}else{n:=n+ }

    ;}

    ;return trim$(while_replace(n,  , ))

}

while_replace(s$,from$,to$) {//wichtig! könnte ein weiterer bool param sein für translate!

    while instr(from$,s$) {s$:=translate$(s$,from$,to$)}

    return s$

}

gettext2g(long h){//sollte XProfan eh können!

    long l:=sendmessage(h,wm_gettextlength,0,0)
    casenot l:return
    inc l
    mem mem=l
    sendmessage(h,wm_gettext,l,mem)
    string s:=string$(mem,0)
    dispose mem
    return s

}

settext2g(long h,string txt){sendmessage(h,wm_settext,0,addr(txt))}

hexlisttostring(string s){

    long l:=len(s)
    string h,ns

    whileloop 1,l,2{

        h:=mid$(s,loop,2)
        case h==00 : break
        ns:=ns+chr$(val($+h))

    }

    return ns

}

stringtohexlist(string s){

    long l:=len(s)
    string ns,ts

    whileloop l{

        ts:=hex$(ord(mid$(s,loop,1)))
        case len(ts)==1 : ts:=0+ts
        ns:=ns+ts

    }

    return ns

}

lb.create(bool mode) {;return Control(LISTBOX,, $100+if(mode,2,),,,,,hwnd,,);}

lb.sortinternallist{//interne Liste sortieren! Wichtig!

    long h:=lb.create(true)//create sorted list
    movelisttohandle(h)
    clearlist
    movehandletolist(h)
    destroywindow(h)

}


Was leider wirklich fehlt:

+ die Möglichkeit eine einzelne Usermessage entfernen zu können, was bisher nur mit meiner usermessages-Unit möglich ist - was übrigens die einzige Daseinsberechtigung der Unit darstellt,
+ die Möglichkeit ohne API mousex,mousey und Maustasten ausserhalb hwnd zu ermitteln, wodurch man gezwungen ist eine Art MausInclude zu verwenden: z.B.:
KompilierenMarkierenSeparieren
Eine native Implementierung von filegetcontents und fileputcontents könnte derart umgesetzt sein:
KompilierenMarkierenSeparieren
Und dann fällt mir immer wieder auf das print nicht wirklich das komplette hwnd nutzt - besonders dann wenn das hwnd nachträglich maximiert wurde.



Nachtrag: Bei der Programmierung von Spielen stelle ich oft fest das es nicht wirklich einfach ist den wm_close vom hwnd abzufragen wenn man kein WaitInput und GetMessage verwendet.
 
07.09.2007  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.112 Betrachtungen

Unbenanntvor 0 min.
Christof Neuß16.12.2017
Walter02.02.2016
iF23.10.2011

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

iF (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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