Français
SDK-Helfer/ Tools

JRPC neuer Präkompiler pour XProfan X4 - JRPC3

 
- page 1 -



Jens-Arne
Reumschüssel
Guten soir zusammen,

je suis kürzlich sur cela Problem gestolpert, dass XPSE une assez grand Quelldatei de Je ne plus verarbeiten konnte. Variablen wurden soudain comme pas défini gemeldet et autre "erratische" Probleme plus. je pourrait mir présenter, dass ca daran liegt, dass XPSE Schlüsselworte dans Windows-Atoms verwaltet. voilà irgendwann Schluss (chez irgendwas entre 60.000 et 70.000 Stück, wobei on considérer muss, dass XPSE qui Windows-API avec vorhält). Peut-être es mais aussi quelque chose entier d'autre, je peux oui pas dans den "Maschinenraum" de XPSE regarder.

Jedenfalls blieb mir, là XPSE pas plus gepflegt wird, rien d'autre übrig, comme cela nachzubauen. cela Ergebnis ist JRPC3.

----- Features:

*vernünftige annonce de Fehlern
*directe Anzeige des Programmablaufes dans XProfEd (sofern qui unten erhältliche aufgebohrte XProfEd verwendet wird)
*Umsetzung qui alten Profan-Syntax pour Operatoren et vieille Containerfunktionen
*extrem schnelle native fbPROCs, sofern on FreeBasic installiert hat (kostenlos, siehe Aider)
*avec fbPROCs peux zudem Inline-Assembler aussi avant XProfan X4 realisiert volonté
*extrem schnelle native pbPROCs, sofern on PureBasic installiert hat
*Echtzeitverfolgung de Variableninhalten
*simple Zeitmessungen im Programmablauf
*Profan-Kompilerdirektiven marcher enfin vernünftig (z.B. Verschachtelung)
*eingebettete Variablen marcher aussi avec Arrays
*qui meisten WIN32-API-Funktionen sommes bereits vordefiniert mitgeliefert
*API-Aufrufe sur @external(...) volonté automatisch dans @call(...)-Aufrufe mise en œuvre
*Einrückungsanalyse zum trouver de vertrackten Verschachtelungsfehlern
*Klammeranalyse zum trouver de vertrackten Klammerfehlern
*ENUMERATE-Fonctionnalité
*Assert zur Fehlerkontrolle
*es peut beliebige DLL dans qui XProfan-EXE integriert volonté, sodass vous pas avec ausgeliefert volonté doit (siehe {$WrapDll})
*simple Killen de avec JRPC3 gestarteten Programmen (interpretiert, .prc gestartet, .exe gestartet)
*extrem vite (et daher naturellement pas dans XProfan geschrieben, là une interpretierte Discours hierfür naturgemäß viel trop lente ist)
*beim Start de JRPC3 bereits vorhandene .prc-Fichiers peut zum Starten et Linken genutzt volonté (es wird un Hinweis angezeigt, dass es sich um un altes Kompilat handelt)
*qui Profan-Compiler peux zur Beschleunigung avec hoher Prozessorpriorität aufgerufen volonté
*eingebauter Update-Checker avec Télécharger, si es un Update gibt (Aider --> online pour Updates chercher)
*64- ou bien 32-bit-Version disponible (simple JRPC3_64.exe ou bien JRPC_32.exe comme Interpreter dans XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] et JRPC3 avec F7 starten) - attention, qui 64-bit-Version erzeugt naturellement aucun 64-bit-XProfan-Programme, là XProfan cela pas peux, mais JRPC3 selbst wird comme 64-bit-Programme fonctionnement
*XProfan X4-Syntax disponible (möglicherweise encore pas alles, là je probablement pas alles en benutze, mais j'ai mich um Vollständigkeit prêt - jedenfalls sommes z.B. HASH-Arrays et QUADINTs dabei)
*Interpreter, PRCs et EXEs peut avec Kommandozeilenparametern fonctionnement volonté
*Interpreter, PRCs, EXEs et XPSE peut avec Administratorrechten fonctionnement volonté
*Prozeduren, qui dans dem aktuellen Programme zwar enthalten sommes, mais pas verwendet volonté, volonté aus qui umgesetzten Dossier entfernt, à Dateigröße des Kompilats possible petite trop tenir
*Variablen, qui dans dem aktuellen Programme zwar enthalten sommes, mais pas verwendet volonté, volonté aus qui umgesetzten Dossier entfernt, à Dateigröße des Kompilats possible petite trop tenir et den Speicherverbrauch trop optimaliser
*nPROCs aus XPSE volonté automatisch avec XPE trop einer DLL mise en œuvre et qui Aufrufe qui nPROCs im Programme entsprechend angepasst, sofern XPSE vorhanden ist
*presque alles aus XPSE funktioniert aussi dans JRPC3 ({$NOERR}, {$(PRE)BATCH}, {$PUSHKEYWORD}, Interpreter, Runtime et Compiler festlegen, Shorties, ...)
*XProfEd_JR avec Voir le texte source-AutoComplete
*XProfEd_JR avec Voir le texte source-Memory-Funktion (Markierungen, trop denen zurückgesprungen volonté peux)

Einschränkungen:
-ne...aucune XPSE-Inline-Assembler, wohl mais XProfan-Inline-Assembler (y allerdings aucun Prüfungen sur Korrektheit des Codes)
-ABER: il peut XPSE aus JRPC3 heraus appel, sodass cet Fonctionnalité weiterhin disponible ist, sofern on XPSE besitzt (neuer Shorty: {$x})
-Variablen, qui dans einer Procédure pas deklariert sommes, mais "aus qui aufrufenden Procédure übernommen werden", sommes standardmäßig pas zugelassen (XProfan erlaubt cela, mais so quelque chose ist genauso tödlich comment GOTO-Anweisungen). s'il te plaît alle trop nutzenden Inputs comme paramètre transfert, et si quelque chose aus dem aufrufenden Programmteil modifié volonté muss, beim Aufruf comme paramètre z.B. @addr(x&) verwenden et dans qui Procédure parameters x# et LONG x#,0=y& nutzen.
si on mais absolument "vererbte" Variablen nutzen voudrais, peux on ca avec qui Kompilerdirektive {$Déclarer...} 1faire.

*comme Hommage à XPSE lautet qui Endung qui Ausgabedatei ".enh3"

une genauere Erläuterung qui individuel Features ist qui chm-Hilfedatei trop entnehmen, qui im Programme sous Aider --> Hilfedatei Montrer ou bien avec F1 disponible ist.

----- /Features

Herunterladen et installer:
JRPC3 peux unten heruntergeladen volonté (setup_jrpc3.exe ou bien comme ZIP-Dossier).
comme Installationsverzeichnis s'il te plaît cela XProfan-Stammverzeichnis angeben, alors dasjenige, dans dem qui Fichiers PROFANE.EXE, PROFCOMP.EXE, PRFRUN32.EXE etc. liegen. Alternativ peux qui ZIP-Dossier heruntergeladen et en le contenu manuel ins XProfan-Stammverzeichnis kopiert volonté.

Einrichtung:
JRPC3_64.exe ou bien JRPC_32.exe comme Interpreter dans XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] et JRPC3 avec F7 starten.

Alle Befehle sommes avec dem Befehl "h" comment "Hilfe" abrufbar et devrait selbsterklärend son.

Pour viele erweitere Features, qui XProfEd betreffen, comment z.B. jenes, qui la ligne, dans qui un faute auftrat, direct dans XProfEd Montrer trop peut, ist qui mitinstallierte XProfEd_JR erforderlich. Pour cette muss on alors XProfEd_JR.exe statt XProfEd.exe comme Editor benutzen. comme "goody" gibt es en supplément, dass beim sur- et Zufalten de Programmen un Fortschrittsanzeiger integriert ist (cela peux chez grand Programmen oui bekanntlich un bisschen dauern).

Es mag son, dass encore pas alles parfait funktioniert. je s'il te plaît hierfür um Nachsicht. mon  Programme laisser sich umsetzen, mais cela muss encore longtemps pas appeler, dass ca avec Programmen anderer Auteurs, qui chacun so ses Eigenheiten avons, aussi funktioniert.

Fehlermeldungen et Verbesserungsvorschläge volontiers à jreumsc@web.de ou bien ici im Forum.

Beste Grüße, Jens-Arne

2.665 kB
Bezeichnung:JRPC3
Version:10.40
Kurzbeschreibung: JRPC3-Installer
Hochgeladen:15.02.2021
Downloadcounter393
Download
1.699 kB
Bezeichnung:XProfEd_JR
Version:5.2
Kurzbeschreibung: vieille Version sans AutoComplete zur Sicherheit
Hochgeladen:15.02.2021
Downloadcounter243
Download
4.065 kB
Bezeichnung:JRPC3
Version:10.40
Kurzbeschreibung: ZIP-Dossier statt Installer
Hochgeladen:02.04.2021
Downloadcounter304
Download
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
16.02.2021  
 



 
- page 12 -


« cette Beitrag wurde comme Solution gekennzeichnet. »

- page 15 -



Jens-Arne
Reumschüssel
il y a une neue Version, qui anders avec dem internen Messagehandling umgeht. s'il te plaît probier qui la fois aus. Peut-être cela Problem avec cela behoben.
 
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 Specht ou bien Peter Funkheld?
suis momentan avec Umbauarbeiten quelque chose sous Druck, mais la fois voyons ...
 
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
eh, oui, pardon, Peter Specht, weil Du sagtest, dass Du Assembler brauchtest.

FreeBasic peux incidemment aussi inline assembler. Könnte on alors dans fbProcs nutzen, si on voulais.
 
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
j'ai maintenant festgestellt, dass es sous den Hochsprachen déjà deutliche Unterschiede gibt (et FreeBasic là chez den beiden, qui je getestet habe, erheblich besser abschneidet, quoi chez anderen Funktionen comme einem bloßen Hochzählen de Variablen mais andersherum ausfallen peux).

j'ai avec PureBasic et FreeBasic une DLL erzeugt, qui une Integervariable dans einer For-Boucle jeweils um une augmenté, et zwar 100.000.000 la fois. Werte sur meinem ordinateur (siehe Footer):

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

qui dernier Wert sagt einem déjà, quoi on gewinnt, si on native Funktionen verwendet. si einem handgeschriebenes Assembler là encore so viel bringt, wird qui Test de Peter (S.) montrer. je suis gespannt.

EDIT:
Habe encore C++ avec Borland 5.5-Compiler ausprobiert. et siehe là: 45ms. eh je... ensuite ist "richtiges" Assembler sûrement deutlich plus rapide comme PureBasic et FreeBasic.

EDIT2:
Am schlechtesten schneidet erstaunlicherweise XPSE avec nProc ab: 360ms. je crois, cela liegt gar pas tellement à qui Ausführungsgeschwindigkeit qui Routine, mais daran, comment nProcs aufgerufen volonté. oui c'est ca cela était oui aussi cela Problem, qui dans JRPC3 trop intégrer. mais je peux mich aussi irren, peut-être ist es doch qui erzeugte Maschinencode à sich.

EDIT3:
intéressant wäre pour Éditer2 alors wohl aussi einmal un comparaison entre XPSE-Inline-Assembler et XProfan-Inline-Assembler.

ici qui XProfan-Routine, qui je zum Testen benutzt et jeweils à qui Sprachen angepasst habe:
declare 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
allô Jens-Arne il y a Einhundertmillion qui du geschrieben la hâte.
et qui Leistung de FreeBasic ist "Top" dabei.

Stell dir avant nous devons 1million rumschupsen avec unseren Heimwerkerprogrammen, quoi cela bedeutet quoi wir là ensuite déjà feines Programmiert avons dans Xprofanx4.

là braucht on encore pas einmal une Inline-ASM.
si du ensuite encore ASM-Sprünge zählst trop certain Adressen , là allez ensuite sogar cela reine ASM dans qui Knie. et qui Sprünge sur 128 tracasser dass ASM encore plus.

là brauchts du dans Xprofanx4 seulement une falschen Sprung faire avec einer Tandis que/For usw , "peng"
ist alles dahin.

alors pour mich ist qui FreeBasic-Leistung dans XProfanx4 cela Feinste vom Feinen.

FreeBasic :
--------------------------------------------
1000000 la fois : a= sin(b)* 3.145678 / 0.345
Mehrmal gestoppt avec ca 43 Millisekunden
--------------------------------------------

So quelque chose pourrait on dans ASM essayer.

Gruss
 
19.01.2022  
 




p.specht

ou bien pouvoir doch la fois cela là: Randwert-Matrix erzeugen  [...] 
ou bien juste une echte xpse-Matrixmultiplikation  [...] 
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
19.01.2022  
 




funkheld
merci pour qui Info.

là je maintenant cet FreeBasic comme Verstärkung pour cela XProfanx4 nehme habe je chez mir XPIA et XPSE de qui liste gestrichen.

Gruss
 
20.01.2022  
 




Jens-Arne
Reumschüssel
allô zusammen,

fbPROCs: chez qui Nutzung de Headerdateien (*.ph) wurden qui vordefinierten et insbesondere qui avec SharedInFbProcs gepushten XProfan-Variablen à falschen se mettre à qui FreeBasic-DLL transfert (im schlimmsten le cas gar pas ou bien mitten dans einer XProfan-PROC). c'est maintenant behoben.

Pour qui letzten En-tête-Dossier ($H xxx.ph) muss zwingend mindestens une globale Variable défini volonté (pas notwendigerweise gepusht), là qui dernier globale Variablendefinition qui Startpunkt pour qui Variablenübergabe à qui FreeBasic-DLL ist et cela pour qui letzten Headerdatei passer muss. Am einfachsten ist es, si on toujours seulement alle Include- et Headerdateien défini et ensuite seulement qui globalen Variablen pour cela XProfan-Programme.

chez den vordefinierten XProfan-Variablen ist qui faute probablement pas aufgefallen, weil qui chez chaque cls et window récente transfert volonté (alors assez sûrement pour qui letzten En-tête-Dossier), weil z.B. %HWnd avant dem ersten cls/window keinen definierten le contenu besitzt.

Salut, 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
Pour long Zeit , merci pour deinen Tip.

quoi gibt es s'il te plaît nouveau sur qui FreeBasic-Bühne ?

merci.
Gruss
 
17.05.2022  
 




Jens-Arne
Reumschüssel
Anscheinend pas viel... Daher habe je la fois un Beispiel pour selbst gezeichnete Buttons mittels OwnerDraw gebaut, cela sans Profan-Subclassing arbeitet (daher ist ne...aucune fastmode nötig) et comme Subclassing-Procédure une fbPROC benutzt, avec cela es joli vite allez.

'Ownerdrawn Buttons

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

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

{$PUSHFBDLLGLOBALLINE Faible Shared As Any Ptr hComctl32}
{$PUSHFBDLLGLOBALLINE Faible 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")
return 0
ENDPROC 'fbinit

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

fbPROC fbRePaintWindow(ByVal hW As Integer,ByVal bkmode As Integer) As Integer
'bkmode: 1=Hintergrund wird récente gezeichnet, 0=Hintergrund wird dans Ruhe gelassen (sais mais pas, si BOOL wirklich aussi 4 Bytes hat, cela steht im MSDN pas 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,plus,erg,hDC
erg=0
weiter=0
CallOrigWndProc=1
'{ 'WM_MOUSEMOVE
si smessage=WM_MOUSEMOVE
for i=1 to _AnzOwnerDrawButtons%
si swnd=peek(integer,_pOB%+(i*4))
num=i
weiter=1
exit for
endif
endfor
si plus
'CallOrigWndProc=0
si 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%
si swnd=peek(integer,_pOB%+(i*4))
num=i
weiter=1
exit for
endif
endfor
si plus
'CallOrigWndProc=0
poke integer,_pMouseTracking%+(num*4),0
fbrepaintwindow(sWnd,0)
endif
'}
'{ 'WM_LBUTTONUP
elseif smessage=WM_LBUTTONUP
for i=1 to _AnzOwnerDrawButtons%
si swnd=peek(integer,_pOB%+(i*4))
num=i
weiter=1
exit for
endif
endfor
si plus
poke integer,_pODBClicked%+(num*4),1
endif
'}
endif
si swnd=%HWnd
si smessage=WM_DRAWITEM
'dans slparam ist qui Pointer sur qui DRAWITEMSTRUCT-Struktur gespeichert
si peek(Integer,slparam+0)=ODT_BUTTON
for i=1 to _AnzOwnerDrawButtons%
si peek(Integer,slparam+20)=peek(integer,_pOB%+(i*4))
num=i
weiter=1
exit for
endif
endfor
si plus
hDC=peek(Integer,slparam+24)
SetBkMode(hDC,TRANSPARENT)
si (peek(Integer,slparam+16) and ODS_SELECTED)=0
si peek(integer,_pMouseTracking%+(num*4))=0 'bedeutet, dass qui Mauszeiger pas sur dem Button steht (car sonst serait qui souris getrackt, jusqu'à vous den Button verlässt)
selectobject(hDC,_hBrushNormal%)
selectobject(hDC,_hPenNormal%)
SetBkColor(hDC,rgb(200,200,200))
d'autre
selectobject(hDC,_hBrushHover%)
selectobject(hDC,_hPenHover%)
SetBkColor(hDC,rgb(100,100,255))
endif
d'autre
selectobject(hDC,_hBrushClick%)
selectobject(hDC,_hPenClick%)
SetBkColor(hDC,rgb(255,0,0))
endif
si (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
si CallOrigWndProc<>0
return DefSubclassProc(sWnd,sMessage,swParam,slParam)
d'autre
return erg
endif
ENDPROC 'fbSubClassProc
'}

PROC CreateODB
parameters hWparent%,text$,x1%,y1%,x2%,y2%
declare hODB%
hODB%:=~CreateWindowEx(0,"Button",text$,~WS_CHILD | ~WS_TABSTOP | ~BS_OWNERDRAW,x1%,y1%,x2%,y2%,hWparent%,0,%HInstance,0)
si 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 (pour Hover-Aktionen)
showwindow(hODB%,1) 'darf seulement ici kommmen, weil seulement ici cela Owner-Drawing par Subclassing abgedeckt ist
endif
return hODB%
ENDPROC 'CreateODB

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

PROC ODBClicked
parameters hB%
si _odbclicked%[_nODB[@str$(hB%])]
_odbclicked%[_nODB[@str$(hB%])]:=0
return 1
d'autre
return 0
endif
ENDPROC 'ODBClicked


'{ ' *** Hauptprogramm
usermessages $10
style de fenêtre 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 (y wird 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
si @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 finissons
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
allô, guten journée.

merci pour deine belle Demo.

Gruss
 
20.06.2022  
 




Jens-Arne
Reumschüssel
Version 7.00

qui neue Version de JRPC3 entfernt deklarierte, mais pas genutzte Variablen aus dem umgesetzten Programme (peux avec {$NOVAREXCLUDE} ausgeschaltet volonté. s'il te plaît sichert Euch qui vieille Version, là hiermit un assez großer intervention dans den Code verbunden ist, qui malheureusement comment toujours fehlerträchtig ist. j'ai getestet, si bien je konnte, mais on sait oui nie.

cet neue Feature ist insbesondere sinnvoll, si on grand Funktionsbibliotheken dans einer INC-Dossier zusammenfasst, de quoi on später souvent seulement entier wenige Funktionen dans einem gegebenen Programme utilise.

qui Startzeit de Programmen, aus denen un großer Überhang de nutzlosen globalen Variablen entfernt wurde, verringert sich spürbar. qui Speicherverbrauch sieht naturellement également viel besser aus.

Struktur- et Klassenvariablen volonté pas entfernt, aussi si vous pas benutzt volonté.

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
Version 7.03

Es volonté eh bien aussi avec DEF definierte API-Funktionen dans external-Aufrufe konvertiert et avec cela, sofern pas ausgeschaltet, dans call-Aufrufe mise en œuvre.

cela Feature peux avec {$NODEF2EXTERNALCONVERSION} ausgeschaltet volonté.
 
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  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

73.779 Views

Untitledvor 0 min.
Jens-Arne Reumschüssel vor 4 Tagen
Axel Berse03.06.2025
Paul Glatz23.05.2025
HofK12.02.2025
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie