Forum | | | | - Seite 1 - |
|  Thomas Freier | Ein Wunsch von Stephan Lührsen [...] . Ein minimal Beispiel mit "Pascals" ocx3 und JS. |
| | | | |
| | | | - Seite 2 - |
| |  Dieter Zornow | Also bei mir stürzen eure Beispiele alle beim Beenden ab, ansonsten funktionierts.. |
| | | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 02.05.2011 ▲ |
| |
| |  | Uhm - könntest Du bitte schauen an welcher Stelle das Programm abstürzt?  |
| | | | |
| |  Thomas Freier | Bei mir nur mit Xprofan X2. Ich glaube, die ocx3 ist nur an XProfan 11 angepaßt. |
| | | | |
| |  | Thomas Freier (02.05.11)
Eine schöne Sonntagsspielerei. Hier noch ein Fehler: ... Und eine Schriftformatierung kann auch nicht schaden: ...
Hab beides in oberes Beispiel eingesetzt:
'{$cleq}
$H Windows.ph
$H ocx3a.ph
$I ocx3a.inc
def $appName "GMOF"
Var dataStorageDir$ = $appDataDir+$appName+"\\"
mkDir dataStorageDir$
'
ocxInit()
var GrundBild$ = @LoadFile$("Grundbild wählen:","Bilder|*.jpg;*.png")
case (Grundbild$="") or (fileExists(grundBild$)=0) : end
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~Grundbildgröße für Linien/-zug
Declare Gbildx%,Gbildy%,bmp&
bmp&=@Create("hPic",-1,Grundbild$)
Gbildx%=%BmpX
Gbildy%=%BmpY
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
windowStyle 1 | 2 | 8 | 16 | 512
window 1000,500
Var Font&=@Create("Font","Verdana",16,0,0,0,0)
SETDIALOGFONT Font&
var Titel$ = "x;1;40;y;1;40;Obj-x;1;60;Obj-y;1;60;LEnd-x;1;60;LEnd-x;1;60;Objekt;0;100"
var LV& = Create("GridBox", %hwnd, Titel$, 0, 580, 10, 400, 190)
'
var irfanExeFile$=substr$(readini$("HKEY_0","Applications\\i_view32.exe\\shell\\open\\command\\",""),2,"\q")
case irfanExeFile$="" : irfanExeFile$="C:\\Programme\\IrfanView\\i_view32.exe"
'
AddString(LV&, "200|100|200|200|0|0|Kreis")
AddString(LV&, "100|20|80|80|0|0|nEck")
AddString(LV&, "400|200|100|200|0|0|Kreis")
' ACHTUNG !! Linien und Linienzug: MCls = Bildgröße und liegt damit auf x=0px, y=0px
' Werte für Linienzug in LEnd-x (LEnd-y) durch ; getrennt
AddString(LV&, "0|0|100|360|300|40|Linie")
AddString(LV&, "0|0|10|20|100;120;230|40;80;100|Linie")
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bilder erstellen und als GIF speichern
' Größe = Grundbild, Pos. und Größe X und Y vorgeben
Declare i%,x%,y%,xx%,yy%,Obj$,Text$
WhileLoop @GetCount(LV&)
x%=val(substr$(@GetString$(LV&,(&loop-1)),3,"|"))
y%=val(substr$(@GetString$(LV&,(&loop-1)),4,"|"))
Obj$=trim$(substr$(@GetString$(LV&,(&loop-1)),7,"|"))
If Obj$="Linie"
xx%=val(substr$(@GetString$(LV&,(&loop-1)),5,"|"))
yy%=val(substr$((substr$(@GetString$(LV&,(&loop-1)),6,"|")),1,";"))
MCls Gbildx%, Gbildy%
StartPaint -1
Line x%, y% - xx%,yy%
i%=2
While 1
text$=(substr$((substr$(@GetString$(LV&,(&loop-1)),5,"|")),i%,";"))
text$=text$+(substr$((substr$(@GetString$(LV&,(&loop-1)),6,"|")),i%,";"))
case trim$(text$)="" : Break
x%=xx%
y%=yy%
xx%=val(substr$((substr$(@GetString$(LV&,(&loop-1)),5,"|")),i%,";"))
yy%=val(substr$((substr$(@GetString$(LV&,(&loop-1)),6,"|")),i%,";"))
Line x%, y% - xx%,yy%
inc i%
wend
EndPaint -1
Else
MCls x%, y%
StartPaint -1
case Obj$="nEck" : Rectangle 0,0 - x%, y%
case Obj$="Kreis" : Ellipse 0,0 - x%, y%
EndPaint -1
EndIf
bmp&=@Create("hPic",0,"&MEMBMP")
Obj$="B"+str$(&loop)+".png"
SavePic dataStorageDir$+Obj$, bmp&
Obj$="B"+str$(&loop)
winExecWait( irfanExeFile$+" "+dataStorageDir$+Obj$+ \
".png /transpcolor=(255,255,255) /convert="+dataStorageDir$+Obj$+".gif" ,1)
EndWhile
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3. html erzeugen
assign #2,dataStorageDir$+"Grid.html"
rewrite #2
Print #2,"<HTML>"
Print #2,"<HEAD>"
Print #2,"<TITLE>Script</TITLE>"
Print #2,"<style>"
Print #2,"body,img,div{margin:0;padding:0;border:0;cursor:default;text-align:center}"
Print #2,"div{font-family:Verdana;font-size:10px;font-weight:normal;COLOR:#6f95c7;padding:0px 0px 0px 0px;}"
Print #2,"</style>"
Print #2,"<script type='text/javascript'>"
Print #2,"<!--"
Print #2,"var evalCode = '';"
Print #2,"function evalNow(){return eval(evalCode)};"
Print #2,"function BilderAusblenden(i){document.getElementsByTagName('div')[i].style.visibility=document.getElementsByTagName('div')[i].style.visibility=='hidden'?'visible':'hidden'}"
Print #2,"-->"
Print #2,"</script>"
Print #2,"</HEAD>"
Print #2,"<body onselectstart='return false' oncontextmenu='return false'>"
Print #2,"<div style='height:527px;width:764px;background-image:url("+fNam2URI(GrundBild$)+")'></div>"
Declare x$,y$,xx$,yy$
WhileLoop @GetCount(LV&)
x$=(substr$(@GetString$(LV&,(&loop-1)),1,"|"))
y$=(substr$(@GetString$(LV&,(&loop-1)),2,"|"))
xx$=(substr$(@GetString$(LV&,(&loop-1)),3,"|"))
yy$=(substr$(@GetString$(LV&,(&loop-1)),4,"|"))
Obj$=trim$(substr$(@GetString$(LV&,(&loop-1)),7,"|"))
'~~~~~~~~
If Obj$="Linie"
xx$=str$(Gbildx%)
yy$=str$(Gbildy%)
EndIf
'~~~~~~~~~~~
Obj$=""+dataStorageDir$+"B"+trim$(str$(&loop))+".gif"
Print #2,"<div style='position:absolute; left:"+x$+"px; top:"+y$+ \
"px;width:"+xx$+"px;height:"+yy$+"px;background-image:url("+fNam2URI(Obj$)+")'>Objekt"+str$(&loop)+"</div>"
EndWhile
Print #2,"</body>"
Print #2,"</html>"
Close #2
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var File$=dataStorageDir$+"Grid.html"
declare WebControl&
var WebObject&=ocxCreate(File$,%hwnd,0,0,565,430,$50000000+$200000+$100000,addr(WebControl&))
var Document&=ocxGet(WebObject&,"Document")
var Script&=ocxGet(Document&,"Script")
SetFocus(LV&)
userMessages 16
while 1
waitinput
case %umessage=16:break
If getFocus(LV&) and (GetCurSel(LV&)>-1)
ocxPut(Script&,"evalCode","BilderAusblenden("+str$(GetCurSel(LV&)+1)+")" )'--Variable setzen
ocxMethod(Script&,"evalNow")'-------Script ausführen
EndIf
endwhile
DeleteObject Font&
DeleteObject bmp&
destroywindow(WebControl&)
ocxDeInit()
proc fNam2URI
parameters s$
return "file:///"+translate$(translate$(s$,"\\","/"),"//","/")
endProc
|
| | | | |
| |  Thomas Freier | Naja, war nur für den Fall, dass einer an dieser Schraube drehen möchte und nicht weis wo und wie. Ich hatte bei winExecWait ein lästiges flackern und in winExec geändert. Machen langsame Rechner dann Probleme? Ich hatte noch keine. |
| | | | |
| |  Dieter Zornow | ich habe mit XProfan X2 getestet wenn die ocx3a Module noch nicht angepasst sind, müsste es an ocxDeInit() liegen, denn alles andere geht ja. |
| | | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 02.05.2011 ▲ |
| |
| |  | Thomas Freier (02.05.11)
Ich hatte bei winExecWait ein lästiges flackern und in winExec geändert. Machen langsame Rechner dann Probleme?
Kann man pauschal nicht sagen, es machen z.B. sehr schnelle Rechner Probleme -
habe an einem sehr schnellen Rechner die Situation dass das XProfanprogramm natürlich bei WinExec einfach weiterläuft und die Bilder noch garnicht vorhanden sind. Darum hatte ich WinExecWait eingestellt.
Ein besseres und eigenes WinExecWait auf CreateProcess-Basis könnte hier helfen mit eigener Schleife solange der Prozess noch läuft - somit würde die Nachrichtenschleife nicht blockiert. |
| | | | |
| |  Thomas Freier | Ja, eine Abfrage, ob auf das zuletzt erzeugte Bild -und nur beim letzten- zugegriffen werden kann, ist eine sichere Lösung. IrfanView kann glaube ich n-mal gestartet werden nur Xprofan sollte erst weiter machen, wenn das letzte Bild geöffnet werden kann. |
| | | | |
| |  | Thomas Freier (02.05.11)
nur beim letzten- zugegriffen werden kann, ist eine sichere Lösung.
Wenn Du z.B. 20 asynchrone WinExecs oder Shells in Auftrag gibst dann kannst Du leider nicht auch davon ausgehen, dass das Programm, dass vom letzten WinExec aufgerufen wurde, auch das Programm ist, dass sich zuletzt beendet - z.B. wenn der 1. Prozess ein viel größeres Bild verarbeiten muss als der 2 .Prozess... |
| | | | |
| |  Thomas Freier | @iF, Ja, ich habe da etwas probiert. Bin mir nicht sicher ob es optimal ist. Stephan will nun doch wohl darauf zurückgreifen und das Bild nach Objektwahl in den sichtbaren Bereich scrollen. Ich bekomme die Variablenübergabe nicht hin. Habe im Moment aber auch leider keine Zeit JS hierfür, und sonst brauch ich es eigentlich nicht, zu lernen. Nimmst du dich dem an?
' {$cleq}
'URL: https://xprofan.com/intl/de/forum/grafiken-mit-overlay-funktionen-an-abwaehlbar/
$H Windows.ph
$H commctrl.ph
$H ocx3a.ph
$I ocx3a.inc
'
def $appName "GMOF"
Var dataStorageDir$ = $appDataDir+$appName+"\\"
mkDir dataStorageDir$
'
ocxInit()
var GrundBild$ = @LoadFile$("Grundbild wählen:","Bilder|*.jpg;*.png")
case (Grundbild$="") or (fileExists(grundBild$)=0) : end
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~Grundbildgröße für Linien/-zug
Declare Gbildx%,Gbildy%,bmp&
bmp&=@Create("hPic",-1,Grundbild$)
Gbildx%=%BmpX
Gbildy%=%BmpY
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def LvGetCheck(2) testbit(sendmessage(&(1),~LVM_GETITEMSTATE,%(2),~LVIS_STATEIMAGEMASK),13)
windowStyle 1 | 2 | 8 | 16 | 512
window 1000,500
Var Font&=@Create("Font","Verdana",16,0,0,0,0)
SETDIALOGFONT Font&
var Titel$ = "Objekt;0;100;x;0;60;y;2;40;Obj-x;1;60;Obj-y;1;60;LEnd-x;1;60;LEnd-x;1;60"
var LV& = Create("GridBox", %hwnd, Titel$, 0, 580, 10, 400, 190)
sendmessage(Lv&,~LVM_SETEXTENDEDLISTVIEWSTYLE,0,~LVS_EX_CHECKBOXES )
declare Lv#
struct Lvi=Mask&,Item&,SubItem&,State&,StateMask&,Text&,TextMax&,Image&,Param&
dim Lv#,Lvi
@Create("Text",%hwnd,"Wähle ein Objekt",580, 200,400, 19)
'
var irfanExeFile$=substr$(readini$("HKEY_0","Applications\\i_view32.exe\\shell\\open\\command\\",""),2,"\q")
case irfanExeFile$="" : irfanExeFile$="C:\\Programme\\IrfanView\\i_view32.exe"
'
AddString(LV&, "Kreis|200|100|200|200|0|0")
AddString(LV&, "nEck|100|20|80|80|0|0")
AddString(LV&, "Kreis|400|200|100|200|0|0")
' ACHTUNG !! Linien und Linienzug: MCls = Bildgröße und liegt damit auf x=0px, y=0px
' Werte für Linienzug in LEnd-x (LEnd-y) durch ; getrennt
AddString(LV&, "Linie|0|0|100|360|300|40")
AddString(LV&, "Linie|0|0|10|20|100;120;230|40;80;100")
var obenL&=@Create("Button",%hwnd,"Fenster nach links oben scrollen",590,370,390,22)
var oben&=@Create("Button",%hwnd,"Fenster entspr. x-y 1.Kreis nach links oben scrollen",590,400,390,22)
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bilder erstellen und als GIF speichern
' Größe = Grundbild, Pos. und Größe X und Y vorgeben
Declare i%,x%,y%,xx%,yy%,Obj$,Text$
WhileLoop @GetCount(LV&)
LvSetCheck(Lv&,(&loop-1),1)'---Eintrag abhaken (0 als 3.Parameter löscht den Haken)
x%=val(substr$(@GetString$(LV&,(&loop-1)),4,"|"))
y%=val(substr$(@GetString$(LV&,(&loop-1)),5,"|"))
Obj$=trim$(substr$(@GetString$(LV&,(&loop-1)),1,"|"))
If Obj$="Linie"
xx%=val(substr$(@GetString$(LV&,(&loop-1)),6,"|"))
yy%=val(substr$((substr$(@GetString$(LV&,(&loop-1)),7,"|")),1,";"))
MCls Gbildx%, Gbildy%
StartPaint -1
Line x%, y% - xx%,yy%
i%=2
While 1
text$=(substr$((substr$(@GetString$(LV&,(&loop-1)),6,"|")),i%,";"))
text$=text$+(substr$((substr$(@GetString$(LV&,(&loop-1)),7,"|")),i%,";"))
case trim$(text$)="" : Break
x%=xx%
y%=yy%
xx%=val(substr$((substr$(@GetString$(LV&,(&loop-1)),6,"|")),i%,";"))
yy%=val(substr$((substr$(@GetString$(LV&,(&loop-1)),7,"|")),i%,";"))
Line x%, y% - xx%,yy%
inc i%
wend
EndPaint -1
Else
MCls x%, y%
StartPaint -1
case Obj$="nEck" : Rectangle 0,0 - x%, y%
case Obj$="Kreis" : Ellipse 0,0 - x%, y%
EndPaint -1
EndIf
bmp&=@Create("hPic",0,"&MEMBMP")
Obj$="B"+str$(&loop)+".png"
SavePic dataStorageDir$+Obj$, bmp&
Obj$="B"+str$(&loop)
winExec( irfanExeFile$+" "+dataStorageDir$+Obj$+ \
".png /transpcolor=(255,255,255) /convert="+dataStorageDir$+Obj$+".gif" ,1)
EndWhile
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~prüfen, Zugriff auf alle Bilder möglich?
x%=@GetCount(LV&)
while x%>0
WaitInput 1
If %key=2
@MessageBox("Programm wird abgebrochen.","Hinweis",16)
DeleteObject Font&
DeleteObject bmp&
ocxDeInit()
End
EndIf
x%=@GetCount(LV&)
whileloop @GetCount(LV&)
Assign #1,dataStorageDir$+"B"+trim$(str$(&loop))+".gif"
Append #1
CaseNot %IoResult: dec x%
Close #1
EndWhile
EndWhile
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3. html erzeugen
assign #2,dataStorageDir$+"Grid.html"
rewrite #2
Print #2,"<HTML>"
Print #2,"<HEAD>"
Print #2,"<TITLE>Script</TITLE>"
Print #2,"<script type='text/javascript'>"
Print #2,"<!--"
Print #2,"var evalCode = '';"
Print #2,"function evalNow(){return eval(evalCode)};"
Print #2,"function BilderAusblenden(i){document.getElementsByTagName('img')[i].style.visibility=document.getElementsByTagName('img')[i].style.visibility=='hidden'?'visible':'hidden'}"
Print #2,"function PosSetzen () {"
Print #2," window.scrollTo(200, 200); }"
Print #2,"function PosOO () {"
Print #2," window.scrollTo(0, 0); }"
Print #2,"-->"
Print #2,"</script>"
Print #2,"</HEAD>"
Print #2,"<body>"
Print #2,"<div><img src='"+fNam2URI(GrundBild$)+"' height='527' width='764'></div>"
Declare x$,y$,xx$,yy$
WhileLoop @GetCount(LV&)
x$=(substr$(@GetString$(LV&,(&loop-1)),2,"|"))
y$=(substr$(@GetString$(LV&,(&loop-1)),3,"|"))
xx$=(substr$(@GetString$(LV&,(&loop-1)),4,"|"))
yy$=(substr$(@GetString$(LV&,(&loop-1)),5,"|"))
Obj$=trim$(substr$(@GetString$(LV&,(&loop-1)),1,"|"))
'~~~~~~~~
If Obj$="Linie"
xx$=str$(Gbildx%)
yy$=str$(Gbildy%)
EndIf
'~~~~~~~~~~~
Obj$=""+dataStorageDir$+"B"+trim$(str$(&loop))+".gif"
Print #2,"<div style= 'position:absolute; left:"+x$+"px; top:"+y$+ \
"px;'> <IMG id='myimg' src='"+fNam2URI(Obj$)+"' height='"+yy$+"' width='"+xx$+"'></div>"
EndWhile
Print #2,"</body>"
Print #2,"</html>"
Close #2
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var File$=dataStorageDir$+"Grid.html"
declare WebControl&
var WebObject&=ocxCreate(File$,%hwnd,5,10,560,420,$50000000+$200000+$100000,addr(WebControl&))
var Document&=ocxGet(WebObject&,"Document")
var Script&=ocxGet(Document&,"Script")
userMessages 16
while 1
waitinput
locate 0,0
case %umessage=16:break
If getFocus(obenL&)
ocxMethod(Script&,"PosOO")'-------Script ausführen
ElseIf getFocus(oben&)
ocxMethod(Script&,"PosSetzen")'-------Script ausführen
ElseIf (getFocus(LV&)) AND (GetCurSel(LV&)>-1)
ocxPut(Script&,"evalCode","BilderAusblenden("+str$(GetCurSel(LV&)+1)+")" )'--Variable setzen
ocxMethod(Script&,"evalNow")'-------Script ausführen
If LvGetCheck(Lv&,getcursel(Lv&))
LvSetCheck(Lv&,getcursel(Lv&),0)'---Eintrag abhaken nein
Else
LvSetCheck(Lv&,getcursel(Lv&),1)'---Eintrag abhaken ja
EndIf
LvDeSelect LV&,GetCurSel(LV&)
EndIf
endwhile
DeleteObject Font&
DeleteObject bmp&
destroywindow(WebControl&)
ocxRelease(Script&,Document&,WebObject&)
ocxDeInit()
End
proc fNam2URI
parameters s$
return "file:///"+translate$(translate$(s$,"\\","/"),"//","/")
endProc
proc LvDeSelect'deselectieren
parameters Lv&,Item&
Declare s#
dim s#,1024
long s#,12=0
long s#,16=~LVIS_SELECTED | ~LVIS_FOCUSED
sendmessage(Lv&,~LVM_SETITEMSTATE,Item&,s#)
dispose s#
endproc
proc LvSetCheck'---------------------------------LvSetCheck------------------------------
parameters Lv&,Item&,Mode%
Lv#.StateMask&=~LVIS_STATEIMAGEMASK
Lv#.State& =$1000*(Mode%+1)
sendmessage(Lv&,~LVM_SETITEMSTATE,Item&,Lv#)
endproc'---------------------------------------------------------------------------------
|
| | | | |
| |  Uwe ''Pascal'' Niemeier | Hi Leute!
Also bei mir stürzen eure Beispiele alle beim Beenden ab, ansonsten funktionierts..
Bei mir nur mit Xprofan X2. Ich glaube, die ocx3 ist nur an XProfan 11 angepaßt.
Das liegt daran, daß bei ocxDeInit() noch Objekte offen sind. Dies sollte Abhilfe schaffen:
Normalerweise wird das Freigeben noch vorhandenener Objekte automatisch bei ocxDeInit() vorgenommen...wenn dies nicht wäre:[...]  Darum klappt's auch mit der 11'er.
Noch was Allgemeines: Man kann einzelne Elemente in der HTML auch von Profan aus gezielt manipulieren; dazu muß man ihnen beim Anlegen/Einfügen nur eine ID verpassen und kann dann z.B. mit var Bild1&=ocxMethod(Document&,"getElementById","Bild1") einen Objektpointer ermitteln. Darüber könnte man dann diverse Eigenschaften erfragen oder ändern. Arbeite nämlich selbst gerade an einem teilweise webbasierten GUI und bin mir dabei auch noch nicht sicher, welche Funktionen über JS und welche über Profan laufen sollen 
HTH Pascal |
| | | | |
| |  | Hallo zusammen. Erst einmal vielen, vielen Dank. Mit dieser Resonanz hätte ich nicht gerechnet. Die Codes habe ich natülich getestet. Bei mir funktionieren die Scroll-Button nicht mehr, wenn ich vorher die Element im ListView auswähle. Kann man das ab- und anwählen auch splitten? Ich würde gerne das Element anzeigen lassen, wenn im ListView eine CheckBox angewählt ist. Wenn ich auf die Zeile im Listview klicke soll nämlich in meinem Programm was anderes passieren. Beispiel: In der ListView ist eine Auflistung von Kartoffelsorten. Wenn ich eine Zeile wähle, werden mir die Eigenschaften der Kartoffelsorte in einem Multiedit angezeigt. Klicke ich jetzt noch die Checkbox an, wird mir das Anbaugebiet auf der Karte gezeigt. Ist ein spezielles Anbaugebiet ausserhalb des Ausschnitt, soll nur bei Bedarf, dorthin gescrollt werden. Nun in meinem Programm geht es nicht um Kartoffeln sondern um Lufträume, aber das Prinzip ist das gleiche. |
| | | | |
|
AntwortenThemenoptionen | 36.526 Betrachtungen |
ThemeninformationenDieses Thema hat 6 Teilnehmer: |