XPSE
Copyright © 1998-2011 XProfan.Com, built DE.

 Funktionsreferenz   Download   Forum   Kontakt   


Funktionsreferenz


Vorwort

Diese Funktionsreferenz gilt innerhalb NProc-Funktionen, gleichnamige Befehle der XProfan-Runtime haben möglicherweise eine andere Syntax und Funktion.

NProc-Funktionen werden in Assembler umgewandelt, um Hooks, Subclassing, Threads, Callbacks und all die Dinge zu programmieren, bei denen es auf Threadsicherheit und hohe Geschwindigkeit ankommt.

Der Sprachschatz innerhalb von NProc-Funktionen orientiert sich an dem von XProfan, weicht aber in einigen Punkten davon ab (siehe hierzu z.B. Syntax), auch um zuverlässigen Umgang mit Threads zu ermöglichen. Zusätzlich kann man innerhalb von NProc-Funktionen Assembler-Befehle verwenden.

Befehlssatz

Der Befehlssatz ergibt sich aus:

  • hier genannten Befehlen, Funktionen, Systemvariablen
  • 25.000 automatisch deklarierten APIs, Konstanten, Strukturen
  • externen Funktionen/ APIs welche über Headerdateien (*.ph) inkludiert werden
  • eigenen NProc-Funktionen welche auch inkludiert werden können
  • Assembler

Native Funktionen können in Profansyntax programmiert werden, oder auch in Assembler - es kann auch Assembler mit Profansyntax gemischt werden. Die Syntax in nativen Funktionen ist einfacher als die der Runtime. Beispielsweise müssen Funktionen immer wie Funktionen aufgerufen werden, nicht Sleep 50 sondern sleep(50) und einzig das Komma ist Parametertrennzeichen. Befehle und Systemvariablen können einzig vom Befehlssatz gestellt werden, NProc-Funktionen sind immer Funktionen. Float-Konstanten müssen immer mit Dezimalpunkt als Kommazahl ausgedrückt werden (z.B. 1.0 statt 1) und Stringkonstanten per Anführungszeichen (z.B. "Stringinhalt").

Siehe auch: C-Style-Syntax

Datentypen

Datentypen Long, Float und String:

TypBytesPostfixSchreibweisen
Long4&
declare a&
var a&=0
long a=0
Float8!
declare a!
var a!=0
float a=0
String8+Zeichen+1$
declare a$
var a$=""
string a=""

Hinweis: Strings können bis zu 4GB groß sein, sind binärsicher (Binary-Safe, alle Zeichen von 0-255 können enthalten sein) und automatisch immer mit Zeichen #0 am Ende abgeschlossen. Strings können direkt an Apis übergeben werden.

Debuggen

Vollautomatischer Zugriff auf die Windows-API ermöglichen beliebige Ausgaben, beispielsweise per OutputDebugString, SetText(hWnd, MessageBox(0,... Schreiben Sie z.B.

OutputDebugString("Ausgabe"+str$(foregroundColor.a))

um den Alphawert der gewählten Vordergrundfarbe mit einem Debug-Viewer wie z.B. DebugView anzuzeigen.

Siehe auch: {$Debug}

Kontrollstrukturen

Folgende Kontrollstrukturen werden unterstützt:

break, continue
case, casenot
do
if, ifnot, elseif, else
for
goto
repeat
return
while, whilenot, whileloop

Operatoren

OperationOperator/ SchreibweisenBoolLongFloatString
AddierenAdd,+
GrundrechnenSub,Mul,Div,-,*,/
ModulaMod,%
IstgleichEqu,=
UngleichNeq,<>,!=
Kleiner<
Grösser>
Bitweises Linksschieben<<
Bitweises Rechtsschieben>>
Kleiner o. gleich<=
Grösser o. gleich>=
Logisches UndAnd,&&
Logisches OderOr,||
Binäres Und&
Binäres Oder|

Siehe auch: Syntax: C-Style: Zuweisungs/ Vergleichsoperatoren

Pseudo-Klassen

Pseudo-Klassen sind das native Gegenstück zu interpretierten Container-Funktionen, wobei die Unterfunktionen nicht per Stringkonstante benannt werden, sondern einfach mit Punkt "." direkt hinter dem Klassennamen geschrieben werden: thread.is() statt thread("is").

Variablen

Variablen sind lokal, typisiert und besitzen einen eindeutigen Namen bestehend aus 1-96 Zeichen welcher keinem Namen anderer Variablen oder Schlüsselworte gleicht (eindeutige Bezeichnernamen). Werden Variablen mit Postfix per Declare oder Var deklariert, dann muss das Postfix für diese Variable durchgehend verwendet werden, andernfalls müssen Variablen kein Postfix besitzen, wenn sie per C-Style deklariert werden.

Siehe auch: Datentypen, Declare, Var, Syntax: C-Style: Variablendeklaration

Zeiger

Siehe: Addr, ProcAddr


Abs(l)

Rückgabewert: Long, Absolutwert von l.

Add

Add als Befehl, Funktion und Operator.

add a,b
a=add(a,b)
a=a add b

Addr(v)

Rückgabewert: Long, Speicheradresse von Variable v.

Siehe auch: ProcAddr

AddString(l,s)

Fügt String s als Eintrag der ListBox l hinzu.

Rückgabewert: Long, undefiniert.

Siehe auch: CreateList, ClearList, DeleteString, GetCount, GetString

Beispiel:

var list&=createList(0)             //erzeuge unsortierte Liste
addString(list&,"Hallo Welt")      //füge "Hallo Welt" als Eintrag zur Liste hinzu.
deleteString(list&,0)             //entferne ersten Eintrag aus der Liste
destroyWindow(list&)             //entferne Liste

ArcCos(f)

Rückgabewert: Float, ArcCos von f.

Siehe auch: Sin, Pi

ArcCot(f)

Rückgabewert: Float, ArcCot von f.

Siehe auch: Sin, Pi

ArcSin(f)

Rückgabewert: Float, ArcSin von f.

Siehe auch: Sin, Pi

ArcTan(f)

Rückgabewert: Float, ArcTan von f.

Siehe auch: Sin, Pi

Between(l1,l2,l3)

Rückgabewert: Bool, ob Wert l1 im Bereich von l2 bis l3.

Siehe auch: Range

BGR(bB,bG,bR[,bA])

Rückgabewert: Long, Farbnummer.

Hinweis: Diese Funktion ist ein Alias für RGB, nur dort nützlich wo Angaben in BGR-Reihenfolge erwartet sind. (z.B. DIB)

Siehe auch: GetAValue, GetBValue, GetGValue, GetRValue

Beispiel:

nProc filter
    parameters h&,_width&,_height&
    var a&=GetPixels(h&,_width&,_height&)
    whileLoop 0,_width&*_height&*4-1,4
        long a&,loop=bgr(255,0,0)
    wend
    SetPixels(h&,a&,_width&,_height&)
endproc

Break

Schleife verlassen.

Siehe auch: Continue, While

Beispiel:

while 1
    case rnd(100) : break
wend

Byte

Wird Byte als Funktion "byte(" verwendet, werden 1 Byte von der Adresse als Long-Wert zurückgeliefert. Byte als Befehl setzt das Byte an Adresse auf den Wert. Der Klarheit halber gibt es auch GetByte und SetByte.

wert&=byte(adresse&,offset&) //8-Bit-Wert von Speicheradresse einlesen
byte adresse&,offset&=wert& //8-Bit-Wert an Speicheradresse setzen

Siehe auch: Long

Call(l[,l1[,...]])

Ruft Funktion an Adresse l auf und gibt den Wert zurück.

Rückgabewert: Long

Case Argument : Anweisung

Anweisung wird ausgeführt, wenn Argument nicht Null ist.

Siehe auch: CaseNot, If

CaseNot Argument : Anweisung

Anweisung wird ausgeführt, wenn Argument Null ist.

Siehe auch: Case, IfNot

Char

Wird Char als Funktion verwendet char(addr,offs,anz) dann werden Anzahl Byte von der Adresse als String zurückgeliefert. Wird Char als Befehl mit einer Variable mit Variablenpostfix angegeben char addr&,offs=s dann werden die Zeichen vom String s hintereinander an die Adresse geschrieben.

Hinweis: Schreibweise Char$( ebenso erlaubt.

Siehe auch: String

Wichtig: In aktueller Version ist Char als Funktion fehlerhaft und daher bitte nicht zu nutzen.

Ersatzfunktion:

nProc _char(long hMem,from,length){
	case length<1 : return ""
	string s=space(length)
	rtlMoveMemory(s,hMem+from,length)
	return s
}

Chr(l)

Rückgabewert: String, Zeichen l - chr(65) liefert "A".

Hinweis: Schreibweise chr$( ebenso erlaubt.

Siehe auch: ord

ClearList(lList)

Entfernt alle Einträge aus lList.

Siehe auch: CreateList

Beispiel:

var list&=createList(0)             //erzeuge unsortierte Liste
addString(list&,"Hallo Welt")      //füge "Hallo Welt" als Eintrag zur Liste hinzu.
clearList(list&)                  //entferne alle Einträge aus List
destroyWindow(list&)             //entferne Liste

Continue

Gehe zu Schleifenkopf.

Siehe auch: break, while

Beispiel:

while 1
    case rnd(10) : continue
    break
wend

Control(sClass, sText, lStyle, lX, lY, lXX, lYY, lParent, lID, lhInstance, lExtStyle)

Erzeugt ein Control.

Rückgabewert: Long, Handle des erzeugten Controls

Cos(f)

Rückgabewert: Float, Cosinus von Winkel f.

Siehe auch: Sin, Pi

CreateList(lTyp)

Rückgabewert: Long, Liste, lTyp 0 ist unsortiert, 1 Sortiert, 2 Mehrfachauswahl, 3 Sortiert und Mehrfachauswahl.

Siehe auch: AddString, ClearList, DeleteString, GetCount, GetString, InsertString

Beispiel:

var list&=createList(0)             //erzeuge unsortierte Liste
addString(list&,"Hallo Welt")      //füge "Hallo Welt" als Eintrag zur Liste hinzu.
deleteString(list&,0)             //entferne ersten Eintrag aus der Liste
destroyWindow(list&)             //entferne Liste

CriticalSection (Pseudo-Klasse)

Die Klasse enthält Funktionen zur Threadsynchronisation.

Siehe auch: Thread

CriticalSection.Begin(sSectionName)

CriticalSection.Begin wartet, wenn die mit sSectionName benannte Sektion läuft und gibt andernfalls ein Sektionshandle zurück und deklariert die Sektion sSectionName als laufend, bis CriticalSection.End mit dem Sektionshandle aufgerufen wird.

Rückgabewert: Long, Sektion.

Beispiel:

var section&=criticalSection.Begin("MeineSektion")
...
criticalSection.End(section&)

CriticalSection.End(lSection)

Rückgabewert: Long, undefiniert, die Sektion lSection wird beendet.

CriticalSection.Is(sSectionName)

Rückgabewert: Bool, True wenn Sektion sSectionName läuft.

Date(l)

Rückgabewert: String, Datum nach Format l.

lRückgabewert
0
01.02.2013
1
01. Februar 2013
2
Freitag, 01. Februar 2013
3
20130201
4
dd.MM.yyyy
5
Fri, 1 Feb 2013 06:00:00 +0100

Hinweis: Schreibweise Date$( ebenso erlaubt.

Siehe auch: GetTickCount, Time, UnixTime

Beispiel:

{$cleq}

cls
clearclip
putclip test()
waitinput
end

nproc test
    var s$=""
    whileLoop 0,5
        s$=s$+date$(loop)+"\n"
    wend
    return s$
endproc

Ausgabe:

08.03.2010
8. März 2010
Montag, der 8. März 2010
20100308
dd.MM.yyyy
Mon, 8 Mar 2010 06:41:40 +0100

Date.isLeapYear(l)

Rückgabewert: Long, ob das per Parameter l übergebene Jahr ein Schaltjahr ist.

Hinweis: Diese Funktion ist noch nicht implementiert.

Beispiel:

nProc Date.isLeapYear(long yr)

    return iff((((yr mod 4) = 0  & (yr mod 100) <> 0) | ((yr mod 400) = 0)),1,0)

endProc

Declare V1,V2,...

Deklariert Variablen mit Postfix $, & oder !.

Siehe auch: Var, Variablen, Datentypen

Beispiel:

declare a&,b!,c$
a&=100
b!=10.1
c$="Hallo Welt"

Deg2Rad(f)

Rückgabewert: Float, Bogenmaß aus Grad f.

Siehe auch: Rad2Deg, Pi

Del(s,l1,l2)

Rückgabewert: String, es werden l2 Zeichen am Position l1 aus dem String s entfernt.

Hinweis: Schreibweise del$( ebenso erlaubt.

DeleteString(lList,lItem)

Löscht aus ListBox lList Eintrag lItem.

Siehe auch: AddString, GetString

Beispiel:

var list&=createList(0)             //erzeuge unsortierte Liste
addString(list&,"Hallo Welt")      //füge "Hallo Welt" als Eintrag zur Liste hinzu.
deleteString(list&,0)             //entferne ersten Eintrag aus der Liste
destroyWindow(list&)             //entferne Liste

Desktop

Systemvariable

Hinweis: Schreibweise %Desktop ebenso erlaubt.

Rückgabewert: Long, Handle des Desktopfensters.

DestroyWindow(l)

Entfernt Fenster oder Control mit Handle l samt Childs.

Rückgabewert: 0 wenn fehlgeschlagen.

Dim(l)

Dimensioniert l Byte Speicher.

Rückgabewert: Long, Speicherhandle

Siehe auch: Dispose, SetByte, SetLong

Beispiel:

long m=dim(16)
dispose(m)

Dispose(l)

Gibt den mit Dim bezogenen Speicher wieder frei.

Rückgabewert: Long, undefiniert

Siehe auch: Dim

Beispiel:

long m=dim(16)
dispose(m)

Div

Div als Befehl, Funktion und Operator:

div a&,b&
a&=div(a&,b&)
a&=a& div b&

DrawText(lDC,lX,lY,s)

Gibt String s auf DC lDC an Position lX,lY aus.

Beispiel:

DrawText(hDC,10,10,"Hallo Welt")

ExitProcess(lExitCode)

Prozess-Not-Stop.

Hinweis: Diese Funktion sollte nur im Notfall verwendet werden, da keine Aufräumarbeiten durchgeführt werden. Der gesamte Prozess (alle Threads) wird beendet und der ExitCode auf lExitCode gesetzt.

Beispiel:

ExitProcess(22)

Float

Float konvertiert Long zu Float (f!=float(20)) oder liesst 8 Byte von einer Adresse (f!=float(addr&,offs&)) und gibt den Wert als Float zurück oder schreibt 8 Byte an eine Adresse (float addr&,offs&=f!) oder Deklariert Variablen ohne PostFix (float a,b,c).

Wird Float als Funktion "float(" verwendet, werden 8 Byte von der Adresse als Float-Wert zurückgeliefert oder wenn nur 1 Parameter angegeben, der übergebene Wert der Long-Variablen als Float zurückgeliefert/konvertiert. Float als Befehl kennt ebenso 2 Möglichkeiten: 1) Wird eine Variable mit Variablenpostfix angegeben, dann wird der Wert an die Adresse des Variablenwertes geschrieben. 2) Suffixlose Variablen werden im C-Style deklariert. Der Klarheit halber gibt es auch GetFloat und SetFloat.

Siehe auch: Int, Long, Var, Variablen, Datentypen

Beispiele:

Variablen a, b und c vom Typ Float deklarieren:

float a,b,c

64-Bit-Wert von Speicheradresse einlesen:

wert!=float(adresse&,offset&)

64-Bit-Wert an Speicheradresse setzen:

float adresse&,offset&=wert!

Beliebiges Beispiel:

nproc test
    float a,b,c
    a=5.5
    return a
endproc

GetString(lList,lPos)

Rückgabewert: String, Zeichen aus Zeile lPos aus ListBox lList.

Hinweis: Schreibweise GetString$( ebenso erlaubt.

Siehe auch: AddString

Beispiel:

var list&=createList(0)          //erzeuge unsortierte Liste
addString(list&,"Hallo Welt")   //füge "Hallo Welt" als Eintrag zur Liste hinzu.
var s$=getString$(list&,0)     //ersten Eintrag der Liste ("Hallo Welt") nach s$ speichern
deleteString(list&,0)         //entferne ersten Eintrag aus der Liste
destroyWindow(list&)         //entferne Liste
messageBox(0,s$,s$,0)

GetText (Pseudo-Klasse)

Die Klasse enthält Funktionen für einfaches Textermitteln aus verschiedenen Controls bereit.

GetText(lH)

Rückgabewert: String, Zeichen aus Text von Control lH.

Hinweis: Schreibweise GetText$( ebenso erlaubt.

Siehe auch: SetText

GetText.Listview(lListview,lColumn,lRow)

Rückgabewert: String, Zeichen aus Text von Zeile lColumn in Spalte lRow aus Listview lListview.

Hinweis: Schreibweise GetTextFromListview$( ebenso erlaubt.

Siehe auch: GetString

GetAValue(l)

Rückgabewert: Long, Alpha in Farbnummer l.

Siehe auch: Rgb

GetBValue(l)

Rückgabewert: Long, Blau in Farbnummer l.

Siehe auch: Rgb

GetByte(adresse,offset)

Liesst von Adresse+Offset 1 Byte und liefert dieses als Long-Wert zurück. Alias für die Funktion Byte(adresse,offset).

Siehe auch: SetByte

GetCount(lList)

Rückgabewert: Long, Anzahl Einträge in iList.

Siehe auch: CreateList

GetExitCode(lPID)

Rückgabewert: Long, ExitCode von Prozess lPID.

GetFloat(adresse,offset)

Liesst von Adresse+Offset 8 Byte und liefert und liefert den Float-Wert zurück. Alias für die Funktion float(adresse,offset).

Siehe auch: SetFloat

GetFocus()

Liefert das Handle des fokusbesitzenden Controls.

Siehe auch: SetFocus

GetGValue(l)

Rückgabewert: Long, Grün in Farbnummer l.

Siehe auch: Rgb

GetLong(adresse,offset)

Liesst von Adresse+Offset 4 Byte und liefert diese als Long-Wert zurück. Alias für die Funktion Long(adresse,offset).

Siehe auch: SetLong

GetParent(lH)

Rückgabewert: Long, Handle des Elterncontrols von lH.

Siehe auch: SetParent

GetPixel(lDC,lX,lY)

Rückgabewert: Long, Farbe von Pixel lX,lY in DC lDC.

Siehe auch: SetPixel, hDC

GetRValue(l)

Rückgabewert: Long, Rot in Farbnummer l.

Siehe auch: Rgb

GetTickCount

Systemvariable

Rückgabewert: Long, vergangene Millisekunden seit Windows-Start.

Hinweis: Schreibweise &getTickCount ebenso erlaubt.

Siehe auch: Sleep, Date, Time, UnixTime

GetWord(adresse,offset)

Liesst von Adresse+Offset 2 Byte und liefert diese als Word-Wert zurück. Alias für die Funktion Word(adresse,offset).

Siehe auch: SetWord

Global V1,V2,...

Deklariert in nativen Funktionen Long-Variablen mit Postfix & und initialisiert die Variablen mit den Werten gleichnamiger globaler per Declare deklarierter Variablen. Somit ist einfacher Zugriff auf globale Variablenwerte gewährleistet.

Hinweis: Aus threadsicherheitsgründen nur Lesezugriff. Threadsichere Globale per Mutex oder Semaphor-APIs.

Siehe auch: Declare

//Hauptfenster Subclassing
declare owp&
cls
owp&=setWindowLong(hWnd,gwl_wndProc,procaddr(hWnd.wndProc,4))
waitinput
end
nProc hWnd.wndProc
    Parameters wnd&,msg&,wp&,lp&
    global owp&
    return callWindowProc(owp&,wnd&,msg&,wp&,lp&)
endproc

Goto "Ziel"

Springt zum Label, Label werden mit einem Doppelpunkt am Zeilenende gekennzeichnet.

Hinweis: Ausführungsblöcke dürfen nicht durchsprungen werden, ebenso muss das Spungziel innerhalb derselben nativen Funktion vorliegen und Sprungziel-Bezeichnungen dürfen funktionsübergreifend nur einmalig verwendet werden.

Sprungmarke:
goto "Sprungmarke"

HDC

Rückgabewert: Long, Hauptfenster-DC.

Hinweis: Schreibweise %hDC ebenso erlaubt.

Siehe auch: HDC2, HWnd

HDC2

Rückgabewert: Long, Hauptfensterkopie-DC.

Hinweis: Schreibweise %hDC2 ebenso erlaubt.

Siehe auch: HDC

Height(lH)

Rückgabewert: Long, Höhe von Control lH.

Siehe auch: Width

HiWord(l)

Rückgabewert: Long, HiWord von l.

Siehe auch: LoWord, Word

HWnd

Rückgabewert: Long, Hauptfenster-Handle.

Hinweis: Schreibweise %hWnd ebenso erlaubt.

Siehe auch: HDC

If Bedingung ... ElseIf Bedingung ... Else ... EndIf

Programmverzweigung.

Siehe auch: Case, IfNot, While

Iff(bArg,lTrue,lFalse)

Rückgabewert: Long, if als Funktion, lFalse wenn bArg gleich 0 ist, andernfalls lTrue.

IfNot Bedingung ... ElseIf Bedingung ... Else ... EndIf

Programmverzweigung.

Siehe auch: If

Ins(sNeedle,sText,lPos)

Rückgabewert: String, sNeedle wird in sText an Position lPos eingefügt.

Hinweis: Schreibweise Ins$( ebenso erlaubt.

Hinweis: Die Funktion ist nicht geeignet um an das Stringende anzuhängen, lPos darf nicht größer len(sText) sein!

Siehe auch: Trim

InsertString(lList,lPos,sText)

Fügt in die Liste lList an Position lPos sText ein.

Rückgabewert: Long, undefiniert.

Siehe auch: CreateList

Beispiel:

var list&=createList(0)             //erzeuge unsortierte Liste
insertString(list&,0,"Hallo Welt") //füge "Hallo Welt" als Eintrag an Position 0 zur Liste hinzu.
deleteString(list&,0)             //entferne ersten Eintrag aus der Liste
destroyWindow(list&)             //entferne Liste

InStr(sNeedle,sText,lFrom)

Rückgabewert: Long, Position vom String sNeedle im String sText bei Suche ab Position lFrom bzw. 0, wenn kein Vorkommen enthalten ist.

Wichtig: In aktueller Version ist diese Funktion fehlerhaft und daher bitte nicht zu nutzen.

Int(f)

Rückgabewert: Long, konvertiert Float f.

Siehe auch: Val

IsKey(l)

Rückgabewert: Bool, True wenn Taste mit Scancode l gedrückt ist.

Siehe auch: MousePressed

Left(s,l)

Rückgabewert: String, l Zeichen von Links von String s.

Hinweis: Schreibweise Left$( ebenso erlaubt.

Siehe auch: Right

Len(s)

Rückgabewert: Long, Stringlänge von s.

Long

Wird Long als Funktion "long(" verwendet und ein Floatparameter angegeben, dann wird der Float wie bei Int in Long konvertiert zurückgegeben. Wird Long als Funktion verwendet und werden eine Adresse und ein Offset angegeben, dann werden 4 Byte von der Adresse als Long-Wert zurückgeliefert. Long als Befehl kennt 2 Möglichkeiten: 1) Wird eine Variable mit Variablenpostfix angegeben, dann wird der Wert an die Adresse des Variablenwertes geschrieben. 2) Suffixlose Variablen werden im C-Style deklariert. Der Klarheit halber gibt es auch GetLong und SetLong.

Variablen a, b und c vom Typ Long deklarieren:

long a,b,c

32-Bit-Wert von Speicheradresse einlesen:

wert&=long(adresse&,offset&)

32-Bit-Wert an Speicheradresse setzen:

long adresse&,offset&=wert&

Float in Long konvertieren:

var a&=long(2.2)

Wichtig: In aktueller Version verhindert ein Fehler im Parser das man mit einem Minuszeichen beginnende Konstanten an Stelle von z& per Long x&,y&=z& und setLong(x&,y&,z&) mit korrektem Vorzeichen in den Speicher schreiben kann. Workaround: long x&,y&=z&*-1

Siehe auch: Var, Variablen, Datentypen

Loop

Systemvariable

Hinweis: Schreibweise &Loop ebenso erlaubt.

Rückgabewert: Long, WhileLoop-Zählerstand

Lower(s)

Rückgabewert: String, Großbuchstaben in String s werden in Kleinbuchstaben umgewandelt.

Hinweis: Schreibweise Lower$( ebenso erlaubt.

Siehe auch: Upper

LoWord(l)

Rückgabewert: Long, LoWord von l.

Siehe auch: HiWord, Word

LTrim(s)

Rückgabewert: String, alle voranstehenden Zeichen mit Wert <33 werden abgeschnitten.

Hinweis: Schreibweise LTrim$( ebenso erlaubt.

Siehe auch: Trim

MaxX

Rückgabewert: Long, Desktopbreite.

Hinweis: Schreibweise %maxx ebenso erlaubt.

Siehe auch: MaxY

MaxY

Rückgabewert: Long, Desktophöhe.

Hinweis: Schreibweise %maxy ebenso erlaubt.

Siehe auch: MaxX

MemDC

Rückgabewert: Long, Speicherbitmap-DC.

Hinweis: Schreibweise &MemDC ebenso erlaubt.

Siehe auch: HDC2, HWnd

MessageBox(lhWnd,sText,sTitle,lStyle)

Rückgabewert: Long, Auswahl.

MSDN: MessageBox

Mid(s,lFrom,lCount)

Rückgabewert: String, lCount Zeichen ab Position lFrom aus String s.

Hinweis: Schreibweise Mid$( ebenso erlaubt.

Siehe auch: Trim

MKLenL(s,sF,lCount)

Rückgabewert: String, ist die Länge von String s kleiner lCount, wird von Links mit dem Zeichen sF aufgefüllt.

Wichtig: In aktueller Version ist diese Funktion fehlerhaft implementiert und kann zu abstürzen führen - deshalb diese Ersatzfunktion benutzen:

nProc mkl(string s,f,long l){
	long c=len(s)
	caseNot c<l : return s
	return mkStr(f,l-c)+s
}

Hinweis: Schreibweise MKLenL$( ebenso erlaubt.

Siehe auch: Trim

MKLenR(s,sF,lCount)

Rückgabewert: String, ist die Länge von String s kleiner lCount, wird von Rechts mit dem Zeichen sF aufgefüllt.

Wichtig: In aktueller Version ist diese Funktion fehlerhaft implementiert und kann zu abstürzen führen - deshalb diese Ersatzfunktion benutzen:

nProc mkr(string s,f,long l){
	long c=len(s)
	caseNot c<l : return s
	return s+mkStr(f,l-c)
}

Hinweis: Schreibweise MKLenR$( ebenso erlaubt.

Siehe auch: Trim

MKStr(s,lCount)

Rückgabewert: String, String s lCount mal wiederholt.

Hinweis: Schreibweise MKStr$( ebenso erlaubt.

Siehe auch: Trim

MousePressed

Rückgabewert: Long, augenblicklich gedrückte Maustaste(n), 1 für linke Maustaste; 2 für rechte Maustaste; 3 für linke und rechte Maustaste.

Hinweis: Schreibweise %MousePressed ebenso erlaubt.

Siehe auch: MouseX, MouseY

MouseX

Rückgabewert: Long, X-Position des Mauszeigers relativ zum Hauptfenster (hWnd)

Hinweis: MouseX gibt auch dann die korrekte X-Position des Mauszeigers relativ zum Hauptfenster zurück, wenn der Mauszeiger nicht über dem Hauptfenster steht.

Hinweis: Schreibweise %MouseX ebenso erlaubt.

Siehe auch: MouseY, MousePressed

MouseY

Rückgabewert: Long, Y-Position des Mauszeigers relativ zum Hauptfenster (hWnd)

Hinweis: MouseX gibt auch dann die korrekte Y-Position des Mauszeigers relativ zum Hauptfenster zurück, wenn der Mauszeiger nicht über dem Hauptfenster steht.

Hinweis: Schreibweise %MouseY ebenso erlaubt.

Siehe auch: MouseX, MousePressed

Mul

Mul als Befehl, Funktion und Operator:

mul a&,b&
a&=mul(a&,b&)
a&=a& mul b&

Not(l)

Logisches Not als Funktion.

Rückgabewert: Bool, 1 wenn l gleich 0 ist.

nProc Name

Native Funktionen sind lokal, typisiert und besitzen einen eindeutigen Namen bestehend aus 1-96 Zeichen welcher keinem Namen anderer Funktionen oder Schlüsselworte gleicht (eindeutige Bezeichnernamen). Eine native Funktion deklariert man mit nProc statt Proc, Parameter ebenso mit Parameters und Rückgabewerte ebenso per Return. Die Funktionsadresse einer nativen Funktion, z.B. für APIs/ Callbacks/ Threads, kann mit ProcAddr bezogen werden. Für native Funktionen sind optionale Parameter und datentypunterschiedliche Rückgabewerte innerhalb einer nProc nicht unterstützt, pro nProc maximal eine Parameters-Zeile und bei Nutzung von mehreren Return-Anweisungen innerhalb einer nProc muss der zurückzugebene Datentyp immer derselbe sein.

Hinweis: Sind Parameter und Rückgabewert Long, wird höchste Geschwindigkeit erreicht.

Beispiel:

{$cleq}

cls
print test()
waitinput
end

nproc test
    var s$=""
    whileLoop 0,2
        s$=s$+time$(loop)+"\n"
    wend
    return s$
endproc

Ord(s)

Rückgabewert: Bytewert des ersten Zeichens in s.

Hinweis: Um Parsen zu beschleunigen kann der Bytewert beliebiger Zeichen per Array-Schreibweise bezogen werden: s[3] liefert den Bytewert des 3. Zeichens, "HALLO"[2] liefert 65 für "A" und str("123")[1] liefert 49 für "1" zurück.

Beispiel:

{$cleq}

cls
print test(),test2(),test3()
waitinput
end

nproc test
    var s$="Hallo Welt"
    return ord(s$)
endproc

nproc test2
    var s$="Hallo Welt"
    return s$[1]
endproc

nproc test3
    var s$="Hallo Welt"
    return s$[2]
endproc

Ausgabe:

72 72 97

PopAll

Die Register edi, esi, edx, ecx, ebx und eax werden in dieser Reihenfolge vom Stack zurückgesichert.

Siehe auch: PushAll, ProcAddr

PostMessage(lhWnd,lMsg,lWP,lLP)

Rückgabewert: Bool, True wenn Nachricht lMsg an lhWnd abgesandt wurde.

Siehe auch: SendMessage

ProcAddr(FunktionsName,Parameteranzahl)

Funktion ProcAddr liefert die Funktionsadresse der als Paramameter übergebenen Funktion, der Funktionsname darf nicht als Stringkonstante angegeben werden. Innerhalb und ausserhalb nativer Funktionen kann ProcAddr auf Funktionsadressen nativer Funktionen zeigen, in diesem Fall ist der Parameter Parameteranzahl optional bzw. wird ignoriert. Funktionen gedacht für Callbacks sollten ggf. per PushAll und PopAll alle Register sichern und wiederherstellen zu Funktionsbeginn bzw. Funktionsende, andernfalls können die Registerwerte auf eigene Gefahr ebenso einfach auch verarbeitet/geändert werden was bei manchen CalListack-Funktionen aus Geschwindigkeitsgründen durchaus Sinn machen kann.

Siehe auch: Addr

PushAll

Die Register eax, ebx, ecx, edx, esi und edi werden in dieser Reihenfolge auf den Stack gelegt.

Siehe auch: PopAll, ProcAddr

Parameters P1,P2,...

Die Variablen für die Aufnahme der Funktionsparameterwerte werden deklariert, pro native Funktion kann nur eine Parameters-Anweisung erfolgen zur Aufnahme von maximal 15 Übergabewerten. Unterstützung für optionale und/oder typendynamische Parameter ist bei nativen Funktionen nicht gegeben, tatsächlich übergebene Parameter müssen zwingend in Anzahl und Typ mit der Deklaration übereinstimmen.

Pi()

Rückgabewert: Float, Kreiszahl PI 3,14159265...

Siehe auch: Sin

Rad2Deg(f)

Rückgabewert: Float, Grad aus Bogenmaß f.

Siehe auch: Deg2Rad, Pi

Range(l1,l2,l3)

Rückgabewert: Long, l1 im Bereich von l2 bis l3.

Siehe auch: Between

Repeat/ Until Bedingung

Der bis zum dazugehörigen Until reichende Bereich wird solange wiederholt, bis die Bedingung erfüllt ist.

Rem Anmerkungstext

Remark, Anmerkungen hinter diesem Befehl werden nicht als Quelltext interpretiert.

RemoveChar(s,l)

Rückgabewert: String, s ohne Zeichen mit Bytewert l.

Hinweis: Schneller als Translate$.

Hinweis: Diese Funktion ist noch nicht implementiert.

Beispiel:

nProc removeChar(string s,long ch)
	long 	l=len(s),b
	string 	ns=space$(l)
	long 	nsa=addr(ns)
	whileLoop len(s)
		b=s[loop]
		case b=ch : continue
		setByte(nsa,0,b)
		add nsa,1
	wend
	b=nsa-addr(ns)
	casenot b : return ""
	return mid$(ns,1,b)
endproc

Return [Wert]

Die Funktion wird verlassen. Ist kein Wert angegeben, dann ist der Funktionstyp Long, andernfalls bestimmt der Wert den Datentyp der Funktion. Es können beliebig viele Return-Anweisungen erfolgen, die alle den selben Datentyp zurückgeben müssen.

RGB(bR,bG,bB[,bA])

Rückgabewert: Long, Farbnummer.

Siehe auch: GetAValue, GetBValue, GetGValue, GetRValue

RGBA(bR,bG,bB[,bA])

Rückgabewert: Long, Farbnummer.

Hinweis: RGBA ist ein Alias für RGB welcher auch in nicht-nativen Funktionen genutzt werden kann.

Siehe auch: GetAValue, GetBValue, GetGValue, GetRValue

Right(s,l)

Rückgabewert: String, l Zeichen von Rechts von String s.

Hinweis: Schreibweise Right$( ebenso erlaubt.

Siehe auch: Left

Rnd(l)

Rückgabewert: Long, Vorzeichenbehaftete Zufallszahl zwischen 0 und l-1.

Hinweis: Rnd muss nicht initialisiert werden und ist threadsicher.

RTrim(s)

Rückgabewert: String, alle am Stringende vorkommenden Zeichen mit Wert <33 werden abgeschnitten.

Hinweis: Schreibweise RTrim$( ebenso erlaubt.

Siehe auch: Trim

ScrollControl(lCtrl,lMode,lInnerWidth,lInnerHeight)

Rückgabewert: Long, wenn lMode -1, Handle des erzeugten ScrollControls, andernfalls undefiniert.

lModeFunktion
1Für das Control oder Fenster lCtrl wird Scrollen eingeschaltet, die inneren Ausmasse legen lInnerWidth und lInnerHeight fest.
ScrollWindow(hWnd,1,4000,3000)
0Für das Control oder Fenster lCtrl wird Scrollen ausgeschaltet.
ScrollWindow(hWnd,0,0,0)
-1Erzeugt auf Control oder Fenster lCtrl ein ScrollControl mit inneren Ausmassen lInnerWidth und linnerHeight, das Control kann mit SetWindowPos positioniert werden.
ScrollWindow(hWnd,-1,640,480)

Siehe auch: hWnd

SendMessage(lhWnd,lMsg,lWP,lLP)

Rückgabewert: Long, Antwort von lhWnd auf die Nachricht lMsg.

Siehe auch: PostMessage

SetBit(lL,lB,bOnOff)

Rückgabewert: Long, lL mit auf bool bOnOff gesetztem Bit lB.

Siehe auch: TestBit

SetByte(adresse,offset,wert)

Setzt Byte bei Adresse+Offset auf den Wert. Alias für den Befehl Byte adresse&,offset=wert.

Siehe auch: GetByte

SetFloat(adresse,offset,wert)

Setzt 8 Byte an Adresse+Offset auf den Float-Wert. Alias für den Befehl float adresse&,offset=wert.

Siehe auch: GetFloat

SetFocus(lH)

Setzt den Fokus auf Control lH.

Siehe auch: GetFocus

SetLong(adresse,offset,wert)

Setzt 4 Byte Speicher bei Adresse+Offset auf den Wert. Alias für den Befehl Long adresse&,offset=wert.

Siehe auch: GetLong

SetParent(lH,lHN)

Setzt Control mit dem Handle lH auf das Elternfenster mit dem Handle lHN.

Siehe auch: GetParent

SetPixel(lDC,lX,lY,lCol)

Setzt in DC lDC Pixel lX,lY auf Farbe lCol.

Siehe auch: GetPixel, hDC

SetText(lH,s)

Setzt Text von Control lH auf s.

Siehe auch: GetText

SetWord(adresse,offset,wert)

Setzt die 2 Byte Speicher bei Adresse+Offset auf den Wert. Alias für den Befehl Word adresse&,offset=wert.

Siehe auch: GetWord

Sin(f)

Rückgabewert: Float, Sinus von Winkel f.

Siehe auch: Cos, Pi

Sleep(l)

Thread hält mindestens l Millisekunden an und führt dann fort.

Hinweis: Die Funktion ist meistens nicht millisekundengenau, eher wartet Windows bei Sleep(10) 16ms und bei Sleep(20) 32ms - je nach Prozessor und Windows-Version. Millisekundengenau kann mit einer GetTickCount-Schleife gewartet werden.

Siehe auch: GetTickCount

Space(l)

Rückgabewert: String, in Anzahl l Freizeichen.

Hinweis: Schreibweise Space$( ebenso erlaubt.

Sqr(f)

Rückgabewert: Float, Quadrat von f.

Siehe auch: Sqrt

Sqrt(f)

Rückgabewert: Float, Quadratwurzel von f.

Siehe auch: Sqr

Str(l)

Rückgabewert: String, Wert von Long l in Zeichenkette umgewandelt.

Hinweis: Schreibweise Str$( ebenso erlaubt.

Siehe auch: Val

String

Wird String als Funktion verwendet String (addr,offs), dann wird von der Adresse ein nullterminierter String eingelesen. Wird String als Befehl mit einer Variable mit Variablenpostfix angegeben string addr&,offs=s dann werden die Zeichen vom String s hintereinander an die Adresse geschrieben und ein NulListyte angehangen.

Hinweis: Schreibweise String$( ebenso erlaubt.

Siehe auch: Char

Sub

Sub als Befehl, Funktion und Operator:

sub a&,b&
a&=sub(a&,b&)
a&=a& sub b&

SubStr(sText,lNum,sSep)

Rückgabewert: String, Teilstring lNum aus sText bei Separator sSep.

Hinweis: Schreibweise SubStr$( ebenso erlaubt.

Siehe auch: MkStr, Trim

Tan(f)

Rückgabewert: Float, Tangens von Winkel f.

Siehe auch: Cos, Pi

TestBit(lL,lB)

Rückgabewert: Bool, Bit lB in long lL.

Siehe auch: SetBit

Thread (Pseudo-Klasse)

Die Klasse enthält Funktionen für einfache Handhabung asynchron ablaufender Funktionen.

Siehe auch: Criticalsection

Thread.Close(lThread)

Gib lThread wieder frei, läuft der Thread lThread noch, wird er mit Thread.Halt Not-angehalten.

Hinweis: Vor Thread.Close sollte der Thread beendet sein, z.B. mit Thread.Stop Beenden anfordern und per Thread.Is prüfen, ob Thread beendet ist.

Thread.Halt(lThread)

Thread-Not-Stop, der Thread wird sofort beendet.

Hinweis: Diese Funktion sollte nur im Notfall verwendet werden, da keine Aufräumarbeiten durchgeführt werden.

Thread.Is(lThread)

Rückgabewert: Bool, True wenn Thread lThread läuft.

Wichtig: In aktueller Version liefert diese Funktion fehlerhaft immer 0 zurück.

Thread.Message(lThread)

Ein Thread kann per Thread.Message auf Nachrichteneingang von Nachrichten prüfen, die z.B. von anderen Threads abgesandt wurden.

Rückgabewert: Long, per Thread.Sendmessage an den Thread lThread gesandte Nachricht.

Beispiel:

nproc meinThread
	parameters thread&,dataLong&,dataString$
	whilenot thread.message(thread&)=wm_close
		sleep(1000)
	wend
	return 0
endproc

Thread.Message.lParam(lThread)

Rückgabewert: Long, lParam der per Thread.Sendmessage an den Thread gesandten Nachricht.

Thread.Message.wParam(lThread)

Rückgabewert: Long, wParam der per Thread.Sendmessage an den Thread gesandten Nachricht.

Thread.Restart(lThread)

Rückgabewert: Bool, True wenn Thread lThread neu gestartet werden konnte, False wenn der Thread läuft.

Hinweis: Nur ein Thread welcher nicht läuft ( Thread.Is ), kann neu gestartet werden.

Thread.Sendmessage(lThread,lMsg,lwParam,llParam)

Sendet an Thread lThread Nachricht lMsg mit wParam lwParam und lParam llParam, der Thread kann die Nachricht mit Thread.Message abrufen.

Thread.Start(lProcAddr,lDataLong,sDataString)

Ein neuer Thread wird erzeugt, lProcAddr zeigt auf die Funktion, die asynchron in einem eigenen Thread ablaufen soll. lDataLong und sDataString sind eine Hilfe, einen Long und einen String an den Thread als Parameter zu übergeben.

Rückgabewert: Long, lThread. Wenn lThread nicht mehr benötigt wird, mit Thread.Close freigeben.

Hinweis: Hat die Funktion lProcAddr ihr Ende erreicht, ist auch der Thread beendet. Ein beendeter Thread kann mit Thread.Restart neu gestartet werden.

Siehe auch: Thread.Close, Thread.Stop, Thread.SendMessage

Beispiel:

{$cleq}

cls
var thread&=thread.start(procaddr(meinThread),0,"")
waitinput
thread.stop(thread&)      //Thread senden, dass er sich beenden soll
while thread.is(thread&)  //Warten, solange Thread aktiv
wend
thread.close(thread&)	  //lThread Speicher freigeben
end

nproc meinThread
	parameters thread&,dataLong&,dataString$
	whilenot thread.message(thread&)==wm_close
		settext(%hWnd,"Mein FensterTitel - ["+time$(0)+"."+substr$(time$(1),1,".")+"]")
		sleep(1000)
	wend
	return 0
endproc

Thread.Stop(lThread)

An den Thread wird per Thread.SendMessage wm_close gesendet, der Thread kann sich darauf hin beenden. Ob ein Thread tatsächlich noch läuft, kann mit Thread.Is geprüft werden.

Siehe auch: Thread.Halt, Thread.Restart

Time(l)

Rückgabewert: String, Zeit nach Format l.

lRückgabewert
0Stunde:Minute
06:51
1Sek.:Millisek.
59.74
2Unix Timestamp
1268027805

Hinweis: Schreibweise Time$( ebenso erlaubt.

Siehe auch: GetTickCount, Date, UnixTime

Beispiel:

{$cleq}

cls
clearclip
putclip test()
waitinput
end

nproc test
    var s$=""
    whileLoop 0,2
        s$=s$+time$(loop)+"\n"
    wend
    return s$
endproc

Ausgabe:

06:51
59.74
1268027805

Translate(sSrc,sFnd,sReplace)

Rückgabewert: String, alle Vorkommen von sFnd im String sSrc werden nach sReplace ersetzt.

Hinweis: Schreibweise Translate$( ebenso erlaubt.

Hinweis: Diese Funktion ist in aktueller Version nicht vorhanden und kann aber mit diesem Quelltext hergebildet werden:

nProc translate$(string src,fnd,rpl){

	long p=1,fndL=len(fnd),cc=len(src)-fndL+1,rplL=len(rpl)

	case cc<1 : return src
	case src=="" : return ""
	case fnd=="" : return src

	long fndCH=fnd[1]

	while 1 {

		case p > cc : break

		if src[p]==fndCH {

			if mid$(src,p,fndL)==fnd {

				src=del$(src,p,fndL)
				if p>len(src){
					src=src+rpl
				} else {
					src=ins$(rpl,src,p)
				}
				add p,rplL
				cc=len(src)-fndL+1
				continue

			}

		}

		add p,1

	}

	return src

}

Siehe auch: LTrim, RTrim

Trim(s)

Rückgabewert: String, alle voranstehenden und am Stringende vorkommenden Zeichen mit Wert <33 werden abgeschnitten.

Hinweis: Schreibweise Trim$( ebenso erlaubt.

Siehe auch: LTrim, RTrim

UnixTime()

Rückgabewert: Long, Anzahl vergangener Sekunden seit 01.01.1970.

Hinweis: Vorlage für diese Funktion war ein Quelltext von Michael Wodrich: [...].

Siehe auch: Time, Date

Upper(s)

Rückgabewert: String, Kleinbuchstaben in String s werden in Großbuchstaben umgewandelt.

Hinweis: Schreibweise Upper$( ebenso erlaubt.

Siehe auch: Lower

Val(s)

Rückgabewert: Long, voranstehender Dezimalswert in String s wird in Long umgewandelt.

Siehe auch: Str

Var V[=Wert]

Deklariert die angegebene Variable V mit Variablenpostfix und setzt optional den Wert.

Siehe auch: Declare, Variablen, Datentypen

Beispiel(e):

var a&
var a&=10
var b!=10.0
var s$

While Bedingung

Wenn die Bedingung erfüllt ist wird der bis zum dazugehörigen Wend bzw. EndWhile reichende Bereich ausgeführt und anschliessend zum While zurückgesprungen. Vorzeitiger Schleifenabbruch mit Break, zum Schleifenkopf springen mit Continue.

Hinweis: For-Schleifen nach Pascalsyntax werden in While-Schleifen umgewandelt, daher ist Schleifenschreibweise "for i=1 to 100 do begin ... end" möglich.

Hinweis: Im C-Style ist DO für Unendlichschleife nützlich, Schreibweise "do{ ... }".

Siehe auch: Repeat

WhileNot Bedingung

Wenn die Bedingung nicht erfüllt ist wird der bis zum dazugehörigen Wend bzw. EndWhile reichende Bereich ausgeführt und anschliessend zum WhileNot zurückgesprungen.

Siehe auch: Repeat

WhileLoop Anzahl

Der bis zum dazugehörigen Wend bzw. EndWhile reichende Bereich wird Anzahl mal ausgeführt, Systemvariable Loop enthält den Zählerwert.

Siehe auch: While

WhileLoop Von,Bis

Mit Systemvariable Loop wird von Von bis Bis gezählt und der bis zum dazugehörigen Wend bzw. EndWhile reichende Bereich entsprechend oft ausgeführt.

Siehe auch: While

WhileLoop Von,Bis,Schrittweite

Mit Systemvariable Loop wird mit Schrittweite von Von bis Bis gezählt und der bis zum dazugehörigen Wend bzw. EndWhile reichende Bereich entsprechend oft ausgeführt.

Siehe auch: While

Width(lH)

Rückgabewert: Long, Breite von Control lH.

Siehe auch: Height

WinBottom

Rückgabewert: Long, Position unterer Hauptfensterrand.

Hinweis: Schreibweise %WinBottom ebenso erlaubt.

WinLeft

Rückgabewert: Long, Hauptfenster- X-Position.

Hinweis: Schreibweise %WinLeft ebenso erlaubt.

WinRight

Rückgabewert: Long, Position rechter Hauptfensterrand.

Hinweis: Schreibweise %WinRight ebenso erlaubt.

WinTop

Rückgabewert: Long, Hauptfenster- Y-Position.

Hinweis: Schreibweise %WinTop ebenso erlaubt.

Word

Wird Word als Funktion "Word(" verwendet und ein Longparameter angegeben, dann wird der Long wie bei LoWord in Word konvertiert zurückgegeben. Wird Word als Funktion verwendet und werden eine Adresse und ein Offset angegeben, dann werden 2 Byte von der Adresse als Word-Wert zurückgeliefert. Wird Word als Befehl angegeben, dann wird der Wert an die Adresse des Variablenwertes geschrieben. Der Klarheit halber gibt es auch GetWord und SetWord.

16-Bit-Wert von Speicheradresse einlesen:

wert&=word(adresse&,offset&)

16-Bit-Wert an Speicheradresse setzen:

word adresse&,offset&=wert&

Long in Word konvertieren:

var a&=word($FFAAFFAA)

Siehe auch: HiWord, LoWord, GetWord, SetWord

Beispiele

Control(s)/ Dialog erzeugen:

cls
test()
waitinput
end

nproc test

    long h=control("DIALOG","Test",\
            ws_thickFrame | ws_minimizeBox | ws_maximizeBox | ws_visible | \
            ws_sysmenu | ws_Popup | ws_border | ws_child | ws_caption | \
            ws_hScroll | ws_vScroll,\
            300,300,400,400,hWnd,0,hInstance,0)

    long lb=control("LISTBOX","",\
            ws_visible | ws_child | ws_vScroll | ws_border,\
            10,10,100,200,h,0,hInstance,0)

    //listbox demoweise füllen
    sendmessage(lb,wm_setredraw,false,) //listbox zeichnen abschalten, schneller
    whileLoop 1000
        addString(lb,str$(loop))
    wend
    sendmessage(lb,wm_setredraw,true,) //zeichen wieder einschalten

    return h

endproc

Thread(s):

Kurzbeispiel per Thread-Pseudoklasse:

{$cleq}

cls
var thread&=thread.start(procaddr(meinThread),0,"")
waitinput
thread.close(thread&)
end

nproc meinThread
	parameters thread&,dataLong&,dataString$
	...
	return 0
endproc

Ordentliches Beispiel per Thread-Pseudoklasse [...] (empfohlen):

{$cleq}

cls
var thread&=thread.start(procaddr(meinThread),0,"")
waitinput
thread.stop(thread&)      //Thread senden, dass er sich beenden soll
while thread.is(thread&)  //Warten, solange Thread aktiv
wend
thread.close(thread&)	  //lThread Speicher freigeben
end

nproc meinThread
	parameters thread&,dataLong&,dataString$
	whilenot thread.message(thread&)==wm_close
		settext(%hWnd,"Mein FensterTitel - ["+time$(0)+"."+substr$(time$(1),1,".")+"]")
		sleep(1000)
	wend
	return 0
endproc

Thread per CreateThread-API:

cls
createThread(0,0,procAddr(myTest1,1),%hWnd,0,0)
while 1
    locate 1,1
    print myTest2()
    waitinput
wend
end

nproc myTest1
    parameters data&
    while 1
        setText(data&,str$(&getTickCount))
        sleep(100)
    wend
    return data&
endproc

nproc myTest2
    return 50
endproc

Timer-Proc:

Print "Hallo Welt"
~setTimer(%hWnd,0,50,procAddr(myTest1,4))
waitinput
end

nproc myTest1
    parameters data&,b&,c&,d&
    setText(data&,str$(&getTickCount))
    return data&
endproc

HPic, weisses Rauschen:

cls

var hPic&=create("hNewPic",640,480,0)
var hPicPixels&=getPixels(hPic&,640,480)

while 1
    makeMyHPic(hPic&,hPicPixels&)
    drawSizedPic hPic&,0,0 - width(hWnd),height(hWnd);0
wend

end

nProc makeMyHPic
    parameters hPic&,pixels&
    whileLoop 0,1228800,4 //640x480*4
        long pixels&,loop=rnd(2)*$FFFFFF
    wend
    setPixels(hPic&,pixels&,640,480)
endProc

FPU/Fliesskomma selberschreiben:

nProc ArcSin2

    Parameters a!
    //Formel welche unten umgesetzt wird: arctan(a!/Sqrt(-a!*a!+1.0))
    mov eax,addr(a!)
    finit
    fld qword ptr [eax]
    fmul qword ptr [eax]
    fsubr qword ptr __xeTF_00//__xeTF_00 Konstante für 0.0
    fadd qword ptr __xeTF_01//__xeTF_00 Konstante für 1.0
    fsqrt
    fdivr qword ptr [eax]
    fld1
    fpatan
    fwait
    fstp qword ptr [eax]    
    return a!

endproc

Hauptfenster SubClassing:

declare owp&
cls
owp&=setWindowLong(hWnd,gwl_wndProc,procaddr(hWnd.wndProc,4))
waitinput
end
nProc hWnd.wndProc
    Parameters wnd&,msg&,wp&,lp&
    global owp&
    return callWindowProc(owp&,wnd&,msg&,wp&,lp&)
endproc

Hauptfenster SubClassing ohne Globale:

cls
setWindowLong(hWnd,gwl_userData,setWindowLong(hWnd,gwl_wndProc,procaddr(hWnd.wndProc,4)))
while 1
    waitinput
wend
end
nProc hWnd.wndProc
    Parameters wnd&,msg&,wp&,lp&
    if msg&=wm_lButtonDown
        exitProcess(22)
    endif
    return callWindowProc(getWindowLong(wnd&,gwl_userData),wnd&,msg&,wp&,lp&)
endproc

Control/ Listbox- SubClassing:

cls
var lb&=create("listbox",hWnd,"Hallo Welt",10,10,100,100)
setWindowLong(lb&,gwl_userData,setWindowLong(lb&,gwl_wndProc,procaddr(my.wndProc,4)))

while 1
    waitinput
wend

nProc my.wndProc
    parameters wnd&,msg&,wp&,lp&
    var owp&=getWindowLong(wnd&,gwl_userData)
    if msg&=wm_lButtonDown
        exitProcess(22)
    endif
    return callWindowProc(owp&,wnd&,msg&,wp&,lp&)
endproc

Weitere Beispiele:

MessageBoxen in jeweils eigenem Thread, Rückmeldungen asynchoner MessageBoxen-Beispiel: [...]

ScrolListare Fenster und Controls mit dem ScrollControl/ Scrollarea: [...]

Pixel-Echtzeit-Manipulationen: 1 [...], 2 [...], 3 [...]



 Textversion  English  XPSE© - Präkompilierer für XProfan
© 1998 - 2011 XProfan.Com