Funktionsreferenz
Vorwort
Befehlssatz Datentypen Debuggen Kontrollstrukturen Operatoren Pseudo-Klassen Variablen Zeiger VorwortDiese 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. BefehlssatzDer Befehlssatz ergibt sich aus:
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 DatentypenDatentypen Long, Float und String:
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. DebuggenVollautomatischer 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} KontrollstrukturenFolgende Kontrollstrukturen werden unterstützt:
break, continue Operatoren
Siehe auch: Syntax: C-Style: Zuweisungs/ Vergleichsoperatoren Pseudo-KlassenPseudo-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").
VariablenVariablen 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 ZeigerAbs(l)Rückgabewert: Long, Absolutwert von l. AddAdd 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. ArcCot(f)Rückgabewert: Float, ArcCot von f. ArcSin(f)Rückgabewert: Float, ArcSin von f. ArcTan(f)Rückgabewert: Float, ArcTan von f. 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 BreakSchleife verlassen. Beispiel: while 1 case rnd(100) : break wend ByteWird 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 : AnweisungAnweisung wird ausgeführt, wenn Argument nicht Null ist. CaseNot Argument : AnweisungAnweisung wird ausgeführt, wenn Argument Null ist. CharWird 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 ContinueGehe zu Schleifenkopf. 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. 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.
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. 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 DesktopSystemvariable 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) DivDiv 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) FloatFloat 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. GetRValue(l)Rückgabewert: Long, Rot in Farbnummer l. Siehe auch: Rgb GetTickCountSystemvariable 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" HDCRückgabewert: Long, Hauptfenster-DC. Hinweis: Schreibweise %hDC ebenso erlaubt. HDC2Rü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. HWndRückgabewert: Long, Hauptfenster-Handle. Hinweis: Schreibweise %hWnd ebenso erlaubt. Siehe auch: HDC If Bedingung ... ElseIf Bedingung ... Else ... EndIfProgrammverzweigung. 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 ... EndIfProgrammverzweigung. 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. LongWird 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 LoopSystemvariable 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. LTrim(s)Rückgabewert: String, alle voranstehenden Zeichen mit Wert <33 werden abgeschnitten. Hinweis: Schreibweise LTrim$( ebenso erlaubt. Siehe auch: Trim MaxXRückgabewert: Long, Desktopbreite. Hinweis: Schreibweise %maxx ebenso erlaubt. Siehe auch: MaxY MaxYRückgabewert: Long, Desktophöhe. Hinweis: Schreibweise %maxy ebenso erlaubt. Siehe auch: MaxX MemDCRückgabewert: Long, Speicherbitmap-DC. Hinweis: Schreibweise &MemDC ebenso erlaubt. 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 MousePressedRü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. MouseXRü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 MouseYRü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 MulMul 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 NameNative 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 PopAllDie Register edi, esi, edx, ecx, ebx und eax werden in dieser Reihenfolge vom Stack zurückgesichert. 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 PushAllDie Register eax, ebx, ecx, edx, esi und edi werden in dieser Reihenfolge auf den Stack gelegt. 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. Range(l1,l2,l3)Rückgabewert: Long, l1 im Bereich von l2 bis l3. Siehe auch: Between Repeat/ Until BedingungDer bis zum dazugehörigen Until reichende Bereich wird solange wiederholt, bis die Bedingung erfüllt ist. Rem AnmerkungstextRemark, 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.
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. 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. 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 StringWird 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 SubSub 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. Tan(f)Rückgabewert: Float, Tangens von Winkel f. 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.
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 } Trim(s)Rückgabewert: String, alle voranstehenden und am Stringende vorkommenden Zeichen mit Wert <33 werden abgeschnitten. Hinweis: Schreibweise Trim$( ebenso erlaubt. UnixTime()Rückgabewert: Long, Anzahl vergangener Sekunden seit 01.01.1970. Hinweis: Vorlage für diese Funktion war ein Quelltext von Michael Wodrich: [...]. 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 BedingungWenn 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 BedingungWenn 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 AnzahlDer 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,BisMit 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,SchrittweiteMit 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 WinBottomRückgabewert: Long, Position unterer Hauptfensterrand. Hinweis: Schreibweise %WinBottom ebenso erlaubt. WinLeftRückgabewert: Long, Hauptfenster- X-Position. Hinweis: Schreibweise %WinLeft ebenso erlaubt. WinRightRückgabewert: Long, Position rechter Hauptfensterrand. Hinweis: Schreibweise %WinRight ebenso erlaubt. WinTopRückgabewert: Long, Hauptfenster- Y-Position. Hinweis: Schreibweise %WinTop ebenso erlaubt. WordWird 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: [...] |