Español
SDK-Helfer/ Tools

JRPC neuer Präkompiler para XProfan X4 - JRPC3

 
- Página 1 -



Jens-Arne
Reumschüssel
Bueno Abend zusammen,

Yo bin kürzlich encima el problema gestolpert, dass XPSE una bastante große Quelldatei de No mehr verarbeiten podría. Variables fueron plötzlich como no definiert gemeldet y otro "erratische" Problemas mehr. Yo podría me vorstellen, dass dies daran liegt, dass XPSE Schlüsselworte en Windows-Atoms verwaltet. Como es irgendwann Schluss (en algo zwischen 60.000 y 70.000 Stück, wobei uno bedenken muss, dass XPSE el Windows-API con vorhält). Tal vez lo aber auch algo bastante más, Yo de hecho puede no en el "Maschinenraum" de XPSE schauen.

Jedenfalls blieb me, como XPSE no mehr gepflegt se, nichts más übrig, como el nachzubauen. Das Ergebnis es JRPC3.

----- Features:

*vernünftige Meldung de Fehlern
*direkte Anzeige des Programmablaufes en XProfEd (sofern el unten erhältliche aufgebohrte XProfEd verwendet se)
*Umsetzung el alten Profano-Syntax para Operatoren y alte Containerfunktionen
*extremo schnelle native fbPROCs, sofern uno FreeBasic installiert ha (libre, siehe Ayuda)
*con fbPROCs kann zudem Inline-Ensamblador auch antes XProfan X4 realisiert voluntad
*extremo schnelle native pbPROCs, sofern uno PureBasic installiert ha
*Echtzeitverfolgung de Variableninhalten
*einfache Zeitmessungen en el Programmablauf
*Profano-Kompilerdirektiven trabajo endlich vernünftig (z.B. Verschachtelung)
*eingebettete Variables trabajo auch con Arrays
*el meisten WIN32-API-Características son ya vordefiniert mitgeliefert
*API-Aufrufe encima @external(...) voluntad automáticamente en @call(...)-Aufrufe umgesetzt
*Einrückungsanalyse para Finden de vertrackten Verschachtelungsfehlern
*Klammeranalyse para Finden de vertrackten Klammerfehlern
*ENUMERATE-Funktionalität
*Assert a Fehlerkontrolle
*lo puede beliebige DLL en el XProfan-EXE integriert voluntad, sodass ellos no con ausgeliefert voluntad necesario (siehe {$WrapDll})
*einfaches Killen de con JRPC3 gestarteten Programmen (interpretiert, .prc comenzó, .exe comenzó)
*extremadamente rápido (y por lo tanto natürlich no en XProfan geschrieben, como una interpretierte Lingua esta naturgemäß viel a langsam es)
*beim Start de JRPC3 ya vorhandene .prc-Archivos puede para Starten y Linken genutzt voluntad (lo se una Referencia adecuado, dass es una altes Kompilat es)
*el Profano-Compiler kann a Beschleunigung con hoher Prozessorpriorität aufgerufen voluntad
*eingebauter Actualización-Checker con Descargar, si lo una Actualización son (Ayuda --> online después de Updates suchen)
*64- oder 32-bit-Versión verfügbar (simplemente JRPC3_64.exe oder JRPC_32.exe como Interpreter en XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] y JRPC3 con F7 starten) - Achtung, el 64-bit-Versión producido natürlich no 64-bit-XProfan-Programas, como XProfan el no kann, pero JRPC3 incluso se como 64-bit-Programa ausgeführt
*XProfan X4-Syntax verfügbar (möglicherweise todavía no alles, como Yo vermutlich no alles su benutze, pero yo habe mich en Vollständigkeit bemüht - jedenfalls son z.B. HASH-Arrays y QUADINTs esta)
*Interpreter, PRCs y EXEs puede con Kommandozeilenparametern ausgeführt voluntad
*Interpreter, PRCs, EXEs y XPSE puede con Administratorrechten ausgeführt voluntad
*Prozeduren, el en el aktuellen Programa zwar enthalten son, pero no verwendet voluntad, voluntad de el umgesetzten Expediente lejos, a Dateigröße des Kompilats möglichst klein a halten
*Variables, el en el aktuellen Programa zwar enthalten son, pero no verwendet voluntad, voluntad de el umgesetzten Expediente lejos, a Dateigröße des Kompilats möglichst klein a halten y el Speicherverbrauch a optimieren
*nPROCs de XPSE voluntad automáticamente con XPE a uno DLL umgesetzt y el Aufrufe el nPROCs en el Programa entsprechend adaptado, sofern XPSE disponible es
*fast alles de XPSE funktioniert auch en JRPC3 ({$NOERR}, {$(PRE)BATCH}, {$PUSHKEYWORD}, Interpreter, Runtime y Compiler festlegen, Shorties, ...)
*XProfEd_JR con Ver código fuente-AutoComplete
*XProfEd_JR con Ver código fuente-Memory-Función (Markierungen, a denen zurückgesprungen voluntad kann)

Einschränkungen:
-kein XPSE-Inline-Ensamblador, wohl aber XProfan-Inline-Ensamblador (en él allerdings no Prüfungen en Korrektheit des Codes)
-ABER: uno kann XPSE de JRPC3 heraus aufrufen, sodass esta Funktionalität weiterhin verfügbar es, sofern uno XPSE besitzt (neuer Shorty: {$x})
-Variables, el en uno Procedimiento no deklariert son, pero "aus el aufrufenden Procedimiento übernommen werden", son standardmäßig no zugelassen (XProfan erlaubt el, aber así algo es genauso tödlich como GOTO-Anweisungen). Bitte todos a nutzenden Inputs como Parámetro transferencia, y si algo de el aufrufenden Programmteil verändert voluntad muss, beim Aufruf como Parámetro z.B. @addr(x&) uso y el Procedimiento parámetros x# y LONG x#,0=y& nutzen.
Wenn uno aber necesariamente "vererbte" Variables nutzen möchte, puede ser dies con el Kompilerdirektive {$Declarar...} tun.

*como Hommage a XPSE lautet el Endung el Ausgabedatei ".enh3"

Un genauere Erläuterung el individual Features es el chm-Hilfedatei a entnehmen, el en el Programa bajo Ayuda --> Hilfedatei Mostrar oder con F1 verfügbar es.

----- /Features

Descargar y installieren:
JRPC3 kann unten heruntergeladen voluntad (setup_jrpc3.exe oder como ZIP-Expediente).
Als Installationsverzeichnis Por favor, el XProfan-Stammverzeichnis angeben, also dasjenige, en el el Archivos PROFAN.EXE, PROFCOMP.EXE, PRFRUN32.EXE etc. mentira. Alternativ kann el ZIP-Expediente heruntergeladen y deren Inhalt manuell en el XProfan-Stammverzeichnis kopiert voluntad.

Einrichtung:
JRPC3_64.exe oder JRPC_32.exe como Interpreter en XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] y JRPC3 con F7 starten.

Alle Befehle son con el Befehl "h" como "Hilfe" abrufbar y debería selbsterklärend ser.

Für viele erweitere Features, el XProfEd betreffen, como z.B. jenes, el Línea, en el una Fehler auftrat, direkt en XProfEd Mostrar a puede, es el mitinstallierte XProfEd_JR erforderlich. Dafür muss uno also XProfEd_JR.exe en lugar de XProfEd.exe como Editor benutzen. Als "goody" hay dazu, dass beim Auf- y Zufalten de Programmen una Fortschrittsanzeiger integriert es (el kann en großen Programmen sí bekanntlich una bisschen dauern).

Lo mag ser, dass todavía no alles perfekt funktioniert. Yo Por favor, esta en Nachsicht. Mi  Programas dejar se umsetzen, aber el muss todavía largo no heißen, dass dies con Programmen otro Autores, el cada así ihre Eigenheiten haben, auch funktioniert.

Fehlermeldungen y Verbesserungsvorschläge gerne a jreumsc@web.de oder hier en el Foro.

Beste Grüße, Jens-Arne

2.663 kB
Bezeichnung:JRPC3
Versión:10.35
Kurzbeschreibung: JRPC3-Installer
Hochgeladen:15.02.2021
Ladeanzahl390
Descargar
1.699 kB
Bezeichnung:XProfEd_JR
Versión:5.2
Kurzbeschreibung: Alte Versión sin AutoComplete a Sicherheit
Hochgeladen:15.02.2021
Ladeanzahl240
Descargar
4.061 kB
Bezeichnung:JRPC3
Versión:10.35
Kurzbeschreibung: ZIP-Expediente en lugar de Installer
Hochgeladen:02.04.2021
Ladeanzahl304
Descargar
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
16.02.2021  
 



 
- Página 12 -


« Dieser Contribución wurde como Solución gekennzeichnet. »

- Página 15 -



Jens-Arne
Reumschüssel
Lo son una neue Versión, el anders con el internen Messagehandling umgeht. Bitte probier el veces de. Tal vez el problema así Fijo.
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
24.09.2022  
 




p.specht

Peter Pájaro carpintero oder Peter Funkheld?
Bin momentan con Umbauarbeiten algo bajo Druck, aber veces sehen ...
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
19.01.2022  
 




Jens-Arne
Reumschüssel
Oh, sí, Entschuldigung, Peter Pájaro carpintero, porque Usted sagtest, dass Usted Ensamblador brauchtest.

FreeBasic kann de paso auch inline assembler. Könnte uno also en fbProcs nutzen, si uno quería.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
19.01.2022  
 




Jens-Arne
Reumschüssel
Yo habe ahora festgestellt, dass lo bajo el Hochsprachen ya deutliche Unterschiede son (y FreeBasic como en el beiden, el Yo getestet habe, erheblich mejor abschneidet, qué en otro Características como una bloßen Hochzählen de Variables aber andersherum ausfallen kann).

Yo habe con PureBasic y FreeBasic una DLL producido, el una Integervariable en uno For-Bucle jeweils en eins aumenta, y zwar 100.000.000 Tiempo. Werte en mi Computer (siehe Footer):

FreeBasic braucht inklusive DLL-Funktionsaufruf etwa 150ms.
PureBasic braucht inklusive DLL-Funktionsaufruf etwa 200ms.
XProfanX4 braucht kompiliert etwa 55.000ms (also 55 Sekunden).

Der letzte Valor sagt una ya, qué gewinnt, si uno native Características verwendet. Ob una handgeschriebenes Ensamblador como todavía así viel bringt, se el Test de Peter (S.) zeigen. Yo bin gespannt.

EDIT:
Posesiones todavía C++ con Borland 5.5-Compiler ausprobiert. Und siehe como: 45ms. Oh je... Dann es "richtiges" Ensamblador sicher deutlich más rápido como PureBasic y FreeBasic.

EDIT2:
Am schlechtesten schneidet erstaunlicherweise XPSE con nProc de: 360ms. Yo glaube, el liegt nada así muy a el Ausführungsgeschwindigkeit el Rutina, pero daran, como nProcs aufgerufen voluntad. Exactamente el war en efecto el problema, el en JRPC3 a integrieren. Aber Yo kann mich auch irren, tal vez es doch el erzeugte Maschinencode a se.

EDIT3:
Interessant wäre después de Editar2 also wohl auch una vez una Vergleich zwischen XPSE-Inline-Ensamblador y XProfan-Inline-Ensamblador.

Hier el XProfan-Rutina, el Yo para Testen benutzt y jeweils a el Idiomas adaptado habe:
declarar i%,a%
a%=0
for i%,1,100000000
inc a%
endfor
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
19.01.2022  
 




funkheld
¡Hola Jens-Arne lo son Einhundertmillion el du geschrieben hast.
Und el Leistung de FreeBasic es "Top" esta.

Stell dir antes wir necesario 1Million rumschupsen con unseren Heimwerkerprogrammen, qué el bedeutet qué wir como entonces ya feines Programmiert haben en Xprofanx4.

Como braucht uno todavía no una vez una Inline-ASM.
Wenn du entonces ASM-Sprünge zählst a cierto Adressen , como va entonces incluso el reine ASM en el Knie. Und el Sprünge encima 128 quälen dass ASM todavía mehr.

Como brauchts du en Xprofanx4 sólo una falschen Sprung hacer con uno Mientras que/For usw , "peng"
es alles dahin.

Also para mich Es el FreeBasic-Leistung en XProfanx4 el Feinste vom Feinen.

FreeBasic :
--------------------------------------------
1000000 veces : a= sin(b)* 3.145678 / 0.345
Mehrmal gestoppt con ca 43 Millisekunden
--------------------------------------------

So algo podría uno en ASM probieren.

Gruss
 
19.01.2022  
 




p.specht

Oder macht doch veces el como: Randwert-Matrix erzeugen  [...] 
oder igual una echte xpse-Matrixmultiplikation  [...] 
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
19.01.2022  
 




funkheld
Gracias para el Info.

Desde que ahora dieses FreeBasic como Verstärkung para el XProfanx4 nehme Yo en me XPIA y XPSE de el Liste gestrichen.

Gruss
 
20.01.2022  
 




Jens-Arne
Reumschüssel
¡Hola zusammen,

fbPROCs: En Nutzung de Encabezamiento (*.ph) fueron el vordefinierten y insbesondere el con SharedInFbProcs gepushten XProfan-Variables a falschen Stellen a el FreeBasic-DLL transferencia (en el schlimmsten Fall nada oder mitten en uno XProfan-PROC). Es ahora Fijo.

Nach el letzten Encabezamiento-Expediente ($H xxx.ph) muss zwingend mindestens una globale Variable definiert voluntad (no notwendigerweise gepusht), como el letzte globale Variablendefinition el Startpunkt para el Variablenübergabe a el FreeBasic-DLL es y el después de el letzten Headerdatei passieren muss. Am einfachsten es, si uno siempre sólo todos Incluir- y Encabezamiento definiert y luego sólo el globalen Variables para el XProfan-Programa.

En el vordefinierten XProfan-Variables es el Fehler vermutlich no aufgefallen, porque el cada cls y window neu transferencia voluntad (also bastante sicher después de el letzten Encabezamiento-Expediente), porque z.B. %HWnd antes el ersten cls/window no definierten Inhalt besitzt.

Saludo, Jens-Arne
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
07.04.2022  
 




funkheld
Nach langer Tiempo , danke para deinen Tip.

Was hay Por favor, neues en el FreeBasic-Bühne ?

Gracias.
Gruss
 
17.05.2022  
 




Jens-Arne
Reumschüssel
Anscheinend no viel... Daher Yo veces una Ejemplo para incluso gezeichnete Buttons mittels OwnerDraw gebaut, el sin Profano-Subclassing arbeitet (por lo tanto es kein fastmode nötig) y como Subclassing-Procedimiento una fbPROC benutzt, así lo schön rápidamente va.

'Ownerdrawn Buttons

declarar _ende%
declarar _hBrushNormal%,_hBrushClick%,_hBrushHover% SharedInFbProcs
declarar _hPenNormal%,_hPenClick%,_hPenHover%,_hPenFocus%,_hF% SharedInFbProcs
declarar _hB1%,_hB2%,_hB3%,_pMousetracking%,_pOB%,_AnzOwnerDrawButtons%,_pODBClicked% SharedInFbProcs
declarar _MouseTracking%[100],_hODB%[100],_ODBClicked%[100]
declarar hash _nODB[]
declarar _hScDll&

'{ 'FreeBasic-Routinen
{$fbSYNTAX on}
{$SETFBDLLNAME ODButtons}

{$PUSHFBDLLGLOBALLINE Dim Shared As Any Ptr hComctl32}
{$PUSHFBDLLGLOBALLINE Dim Shared DefSubclassProc As Function (ByVal As HWND,ByVal As Integer,ByVal As WPARAM,ByVal As LPARAM) As Integer}

fbPROC fbInit() As Integer Export
hComctl32=DyLibLoad("Comctl32.dll")
DefSubclassProc=DyLibSymbol(hComctl32,"DefSubclassProc")
volver 0
ENDPROC 'fbinit

fbPROC fbDeInit() As Integer Export
DyLibFree(hComctl32)
volver 0
ENDPROC 'fbDeinit

fbPROC fbRePaintWindow(ByVal hW As Integer,ByVal bkmode As Integer) As Integer
'bkmode: 1=Hintergrund se redibujar, 0=Hintergrund se en Ruhe gelassen (weiß pero no, si BOOL wirklich auch 4 Bytes ha, el es en el MSDN no drin)
dim As Byte Pointer b,wr
b=Allocate(6*4)
wr=Allocate(4*4)
GetWindowRect(hW,wr)
poke Integer,b+0,hW 'long b#,0=hW&
poke Integer,b+4,0 'long b#,4=0
poke Integer,b+8,0 'long b#,8=0
poke Integer,b+12,peek(Integer,wr+8)-peek(Integer,wr+0) 'long b#,12=@width(hW&)
poke Integer,b+16,peek(Integer,wr+12)-peek(Integer,wr+4) 'long b#,16=@height(hW&)
poke Integer,b+20,bkmode 'long b#,20=bkmode&
InvalidateRect(hW,b,0)
DeAllocate(b)
DeAllocate(wr)
ENDPROC 'fbRePaintWindow

fbPROC fbSubClassProc(ByVal sWnd As Integer,ByVal sMessage As Integer,ByVal swParam As Integer,ByVal slParam As Integer,ByVal uIdSubclass As Integer Pointer,ByVal dwRefData As Integer) As Integer Export
dim CallOrigWndProc As Integer
dim s as Byte Pointer
dim r as RECT
'dim DIS as DRAWITEMSTRUCT 'DRAWITEMSTRUCT=CtlType&,CtlID&,itemID&,itemAction&,itemState&,hwndItem&,hDC&,rcItemX1&,rcItemY1&,rcItemX2&,rcItemY2&,itemData&
dim TME as TRACKMOUSEEVENT 'TRACKMOUSEEVENT=cbSize&,dwFlags&,hwndTrack&,dwHoverTime&
dim as integer i,num,más,erg,hDC
erg=0
weiter=0
CallOrigWndProc=1
'{ 'WM_MOUSEMOVE
if smessage=WM_MOUSEMOVE
for i=1 to _AnzOwnerDrawButtons%
if swnd=peek(integer,_pOB%+(i*4))
num=i
weiter=1
exit for
endif
endfor
if más
'CallOrigWndProc=0
if peek(integer,_pMouseTracking%+(num*4))=0
'beep
TME.cbSize=16
TME.dwFlags&=TME_LEAVE
TME.hwndTrack=sWnd
TME.dwHoverTime=HOVER_DEFAULT
TrackMouseEvent(@TME)
poke integer,_pMouseTracking%+(num*4),1
fbrepaintwindow(sWnd,0)
endif
endif
'}
'{ 'WM_MOUSELEAVE
elseif smessage=WM_MOUSELEAVE
for i=1 to _AnzOwnerDrawButtons%
if swnd=peek(integer,_pOB%+(i*4))
num=i
weiter=1
exit for
endif
endfor
if más
'CallOrigWndProc=0
poke integer,_pMouseTracking%+(num*4),0
fbrepaintwindow(sWnd,0)
endif
'}
'{ 'WM_LBUTTONUP
elseif smessage=WM_LBUTTONUP
for i=1 to _AnzOwnerDrawButtons%
if swnd=peek(integer,_pOB%+(i*4))
num=i
weiter=1
exit for
endif
endfor
if más
poke integer,_pODBClicked%+(num*4),1
endif
'}
endif
if swnd=%HWnd
if smessage=WM_DRAWITEM
'en slparam es el Pointer en el DRAWITEMSTRUCT-Struktur gespeichert
if peek(Integer,slparam+0)=ODT_BUTTON
for i=1 to _AnzOwnerDrawButtons%
if peek(Integer,slparam+20)=peek(integer,_pOB%+(i*4))
num=i
weiter=1
exit for
endif
endfor
if más
hDC=peek(Integer,slparam+24)
SetBkMode(hDC,TRANSPARENT)
if (peek(Integer,slparam+16) and ODS_SELECTED)=0
if peek(integer,_pMouseTracking%+(num*4))=0 'bedeutet, dass el Mauszeiger no encima el Button es (porque sonst sería el Ratón getrackt, a ellos el Button verlässt)
selectobject(hDC,_hBrushNormal%)
selectobject(hDC,_hPenNormal%)
SetBkColor(hDC,rgb(200,200,200))
más
selectobject(hDC,_hBrushHover%)
selectobject(hDC,_hPenHover%)
SetBkColor(hDC,rgb(100,100,255))
endif
más
selectobject(hDC,_hBrushClick%)
selectobject(hDC,_hPenClick%)
SetBkColor(hDC,rgb(255,0,0))
endif
if (peek(Integer,slparam+16) and ODS_FOCUS)<>0
selectobject(hDC,_hPenFocus%)
endif
rectangle(hDC,peek(Integer,slparam+28),peek(Integer,slparam+32),peek(Integer,slparam+36),peek(Integer,slparam+40))
selectobject(hDC,_hF%)
r.left=peek(Integer,slparam+28)
r.top=peek(Integer,slparam+32)
r.right=peek(Integer,slparam+36)
r.bottom=peek(Integer,slparam+40)
s=Allocate(1002)
sendmessage(peek(Integer,slparam+20),WM_GETTEXT,1000,s)
drawtext(hDC,s,-1,@r,DT_SINGLELINE or DT_CENTER or DT_VCENTER)
DeAllocate(s)
CallOrigWndProc=0
endif
endif
endif
endif
if CallOrigWndProc<>0
volver DefSubclassProc(sWnd,sMessage,swParam,slParam)
más
volver erg
endif
ENDPROC 'fbSubClassProc
'}

PROC CreateODB
parámetros hWparent%,texto$,x1%,y1%,x2%,y2%
declarar hODB%
hODB%:=~CreateWindowEx(0,"Button",texto$,~WS_CHILD | ~WS_TABSTOP | ~BS_OWNERDRAW,x1%,y1%,x2%,y2%,hWparent%,0,%HInstance,0)
if hODB%
inc _AnzOwnerDrawButtons%
_hODB%[_AnzOwnerDrawButtons%]:=hODB%
_nODB[@str$(hODB%)]=_AnzOwnerDrawButtons%
@external("Comctl32.dll","SetWindowSubclass",hODB%,@external("kernel32.dll","GetProcAddress",_hScDll&,"FBSUBCLASSPROC@24"),577,1) 'Button subclassen (para Hover-Aktionen)
showwindow(hODB%,1) 'darf sólo hier kommmen, porque sólo hier el Owner-Drawing por Subclassing abgedeckt es
endif
volver hODB%
ENDPROC 'CreateODB

PROC DestroyODB
parámetros hB%
@external("Comctl32.dll","RemoveWindowSubclass",hB%,@external("kernel32.dll","GetProcAddress",_hScDll&,"FBSUBCLASSPROC@24"),577) 'Button-Subclassing final
_nODB[@str$(hB%)]=0
@destroywindow(hB%)
ENDPROC 'DestroyODB

PROC ODBClicked
parámetros hB%
if _odbclicked%[_nODB[@str$(hB%])]
_odbclicked%[_nODB[@str$(hB%])]:=0
volver 1
más
volver 0
endif
ENDPROC 'ODBClicked


'{ ' *** Hauptprogramm
usermessages $10
windowstyle 1+2+4+8+512
window 500,400
@fbinit()
_AnzOwnerDrawButtons%:=0
_MouseTracking%[1]:=0
_MouseTracking%[2]:=0
_pMouseTracking%:=@addr(_MouseTracking%[0])
_pOB%:=@addr(_hODB%[0])
_pODBClicked%:=@addr(_ODBClicked%[0])
_hBrushNormal%:=~createsolidbrush(@rgb(200,200,200))
_hBrushClick%:=~createsolidbrush(@rgb(255,0,0))
_hBrushHover%:=~createsolidbrush(@rgb(100,100,255))
_hPenNormal%:=~createpen(~PS_SOLID,3,@rgb(200,200,200))
_hPenClick%:=~createpen(~PS_SOLID,3,@rgb(255,0,0))
_hPenHover%:=~createpen(~PS_SOLID,3,@rgb(100,100,255))
_hPenFocus%:=~createpen(~PS_SOLID,3,@rgb(0,0,0))
_hF%:=@create("FONT","Times New Roman",18,0,1,1,0)
_hScDll&:=@usedll("ODButtons.dll")
@external("Comctl32.dll","SetWindowSubclass",%HWnd,@external("kernel32.dll","GetProcAddress",_hScDll&,"FBSUBCLASSPROC@24"),577,1) '%HWnd subclassen (en él se WM_DRAWITEM verarbeitet)
_hB1%:=createodb(%HWnd,"Testbutton 1 (Ende)",10,10,150,30)
_hB2%:=createodb(%HWnd,"Testbutton 2",190,10,150,30)
_hB3%:=@create("BUTTON",%HWnd,"normaler Button",10,70,150,30)
'{ 'Eingabehandling
_ende%:=0
whilenot _ende%
waitinput
if @iskey(27) or (%umessage=$10) or @odbclicked(_hB1%)
_ende%:=1
endif
endwhile
'}
@external("Comctl32.dll","RemoveWindowSubclass",%HWnd,@external("kernel32.dll","GetProcAddress",_hScDll&,"FBSUBCLASSPROC@24"),577) '%HWnd-Subclassing final
DestroyODB(_hB1%)
DestroyODB(_hB2%)
deleteobject _hBrushNormal%
deleteobject _hBrushClick%
deleteobject _hBrushHover%
deleteobject _hPenNormal%
deleteobject _hPenClick%
deleteobject _hPenHover%
deleteobject _hPenFocus%
deleteobject _hF%
freedll _hScDll&
@fbdeinit()
end
'}
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
19.06.2022  
 




funkheld
¡Hola, guten Tag.

Gracias para deine schöne Demo.

Gruss
 
20.06.2022  
 




Jens-Arne
Reumschüssel
Versión 7.00

El neue Versión de JRPC3 lejos deklarierte, pero no genutzte Variables de el umgesetzten Programa (kann con {$NOVAREXCLUDE} ausgeschaltet voluntad. Bitte sichert Euch el alte Versión, como hiermit una bastante großer Eingriff en el código verbunden es, el desafortunadamente como siempre fehlerträchtig es. Yo habe getestet, tan bueno Yo podría, aber uno weiß sí nie.

Dieses neue Feature es insbesondere sinnvoll, si uno große Funktionsbibliotheken en uno INC-Expediente zusammenfasst, wovon uno später oft sólo bastante wenige Características en un gegebenen Programa nutzt.

El Startzeit de Programmen, de denen una großer Überhang de nutzlosen globalen Variables lejos wurde, verringert se spürbar. Der Speicherverbrauch sieht natürlich ebenfalls viel mejor de.

Struktur- y Klassenvariablen voluntad no lejos, auch si ellos no benutzt voluntad.

Beste Grüße, Jens-Arne
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
26.06.2022  
 




Jens-Arne
Reumschüssel
Versión 7.03

Lo voluntad nun auch con DEF definierte API-Características en external-Aufrufe konvertiert y así, sofern no ausgeschaltet, en call-Aufrufe umgesetzt.

Das Feature kann con {$NODEF2EXTERNALCONVERSION} ausgeschaltet voluntad.
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
17.07.2022  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

71.398 Views

Untitledvor 0 min.
Axel Berse vor 6 Tagen
Jens-Arne Reumschüssel vor 10 Tagen
Paul Glatz vor 17 Tagen
HofK12.02.2025
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie