Foro | | | | | ¡Hola todos zusammen...
Yo möchte en mi Programa el Möglichkeit haben, una beliebigen Fenstertitel uno laufenden Programmes en una mehrzeiliges Editierfeld aufzunehmen. Como würdet ihr a el Sache herangehen? ¿Cómo se puede al logisch realisieren? Was wäre el beste Möglichkeit? Wäre para cada Vorschlag dankbar, Fuente son no necesariamente nötig. |
| | | | |
| | | ¿Te ha algo como?
{$cr}
declarar a#,x%,y%,wnd&,me&
dim a#,8
def WindowFromPoint(2) !"USER32", "WindowFromPoint"
def GetCursorPos(1) !"USER32","GetCursorPos"
windowstyle 536
windowtitle "WinTit"
window 0,0 - 400,350
cls rgb(196,196,196)
me&=createmultiedit(%hwnd,"",0,0,width(%hwnd),height(%hwnd))
settimer 250
repeat
Waitinput
ifnot %key
GetCursorPos(a#)
let x%=long(a#,0)
let y%=long(a#,4)
let Wnd&=WindowFromPoint(X%, y%)
settext me&, gettext$(Wnd&)
endif
until %key=2
killtimer
disponer a#
end
|
| | | | |
| | | ¡Hola IF...
Nein, eigentlich no. Como uno a el Fenstertitel kommt, weiß Yo - me fehlt una Concepto para una logische Umsetzung.... In mi Programa hay una mehrzeiliges Editierfeld, en el uno Fenstertitel eingeben kann, en deren Auftreten Windows automáticamente herunterfährt. Yo möchte nun el Anwender no bastante así viel escribir dejar - lo sino que debe para el Anwender auch nachvollziehbar ser, qué él como gerade tut. Yo habe ya a una Möglichkeit mittels Trackmenü pensamiento: Nach Rechtsklick en una Fenstertitelzeile öffnet se una Trackmenü con el Opción como verbotenes Programa definieren. Jetzt beim Carta fällt me auch todavía qué para Drag and Drop una: Durch el Drücken el rechten Botón del ratón puede ser (sólo) el Titelzeile la ventana a a mi Programa el Editierfeld ziehen y hay ablegen por el Suelte el botón del ratón ablegen.
Das wären ya veces zwei Sachen, el programmtechnisch bastante simplemente a lösen son. Gibt lo weitere Möglichkeiten? Was es einleuchtender y mejor a bedienen? Gibt lo irgendwelche Problemas con un Rechtsklick en el Titelzeile uno Fensters (otro Menüs, que abierto... etc.)? |
| | | | |
| | | Was hältst su, simplemente todos Ventana-Titles el sólo irgendwie auftauchen simplemente en un list a tun, y lo auswählbar a hacer. In el List podría una Titel, welcher Grade como Activewin es.
Quasi:
caso oldactivewindowtitle<>activewindowtitle : pushtolist activewindowtitle |
| | | | |
| | | ¡Hola IF...
Wenn Yo dich como ahora correcto verstanden habe, quería ego eigentlich así simplemente auch no haben . Tuve como más a así algo pensamiento:
WINDOWTITLE "Fenstertitel en Editbox ziehen"
Windowstyle 31
Ventana 0,0-640,400
Declarar Cursor#,Curx&,Cury&,Windowhandle&,Windowhandle2&
Declarar Fenstertitel$,EDIT&,EDITZähler&,TEST&,Test$
Declarar Drop&,Breite&,Windowhandle3&
Def @GetAsyncKeyState(1) !"User32","GetAsyncKeyState"
Def @WindowFromPoint(2) !"USER32", "WindowFromPoint"
Def @GetCursorPos(1) !"USER32","GetCursorPos"
DEF ChildWindowFromPoint(3) !"USER32","ChildWindowFromPoint"
Def ScreenToClient(2) !"USER32","ScreenToClient"
@GetAsyncKeyState(2)
LET EDIT&=@createmultiedit(%HWND,"",10,10,300,300)
Mientras que @equ(0,0)
IF @GetAsyncKeyState(2)<>0
Dim Cursor#,8
@GetCursorPos(Cursor#)
let Curx&=long(Cursor#,0)
let Cury&=long(Cursor#,4)
LET Windowhandle&=@WindowFromPoint(Curx&,Cury&)
LET Fenstertitel$=@GetText $(Windowhandle&)
LET Breite&=@Width(Windowhandle&)
If Fenstertitel$<>""
Windowstyle 16
Let Drop&=@createwindow(%Desktop,Fenstertitel$,Curx&,Cury&,Breite&,0)
SetWindowPos %HWND=0,0-640,400;-1
Mientras que @GetAsyncKeyState(2)<>0
@GetCursorPos(Cursor#)
let Curx&=long(Cursor#,0)
let Cury&=long(Cursor#,4)
SetWindowPos Drop&=Curx&,Cury&-Breite&,0;-1
@GetCursorPos(Cursor#)
let Curx&=long(Cursor#,0)
let Cury&=long(Cursor#,4)
LET Windowhandle&=@WindowFromPoint(Curx&,Cury&)
If Windowhandle&<>0
@ScreenToClient(Windowhandle&,Cursor#)
LET Curx&=Largo(Cursor#,0)
LET Cury&=Largo(Cursor#,4)
LET Windowhandle3&=@ChildWindowFromPoint(Windowhandle&,Curx&,Cury&)
Case Windowhandle3&<>0 : LET Windowhandle2&=Windowhandle3&
EndIf
wend
@GetCursorPos(Cursor#)
let Curx&=long(Cursor#,0)
let Cury&=long(Cursor#,4)
LET Windowhandle&=@WindowFromPoint(Curx&,Cury&)
If Windowhandle&<>0
@ScreenToClient(Windowhandle&,Cursor#)
LET Curx&=Largo(Cursor#,0)
LET Cury&=Largo(Cursor#,4)
LET Windowhandle3&=@ChildWindowFromPoint(Windowhandle&,Curx&,Cury&)
Case Windowhandle3&<>0 : LET Windowhandle2&=Windowhandle3&
EndIf
IF Windowhandle2&=Edit&
Usecursor 2
Let EDITZähler&=0
Clearlist
ADDSTRING Fenstertitel$
Mientras que EDITZähler&<@GetLineCount(Edit&)
ADDSTRING @Getline$(EDIT&,Editzähler&)
Let EDITZähler&=Editzähler&+1
wend
@MoveListToEdit(Edit&)
Usecursor 0
setmenuitem 0
@setfocus(%HWND)
endif
@destroywindow(Drop&)
endif
Disponer Cursor#
SetWindowPos %HWND=0,0-640,400;1
endif
wend
... oder auch así qué:
WINDOWTITLE "Erfassen des Fenstertitels con Trackmenü"
Windowstyle 31
Ventana 0,0-640,400
Declarar Cursor#,Curx%,Cury%,Windowhandle&
Declarar Fenstertitel$,EDIT&,EDITZähler&,TEST&,Test$
Def @GetAsyncKeyState(1) !"User32","GetAsyncKeyState"
Def @WindowFromPoint(2) !"USER32", "WindowFromPoint"
Def @GetCursorPos(1) !"USER32","GetCursorPos"
@GetAsyncKeyState(2)
LET EDIT&=@createmultiedit(%HWND,"",10,10,300,300)
CreateMenu
AppendMenu 433,"&Fenstertitel a Editbox senden"
Mientras que @equ(0,0)
IF @GetAsyncKeyState(2)<>0
Dim Cursor#,8
@GetCursorPos(Cursor#)
let Curx%=long(Cursor#,0)
let Cury%=long(Cursor#,4)
Disponer Cursor#
LET Windowhandle&=@WindowFromPoint(Curx%,Cury%)
LET Fenstertitel$=@GetText $(Windowhandle&)
IF @neq$(Fenstertitel$,"")
CreateMenu
AppendMenu 433,"&Fenstertitel a Editbox senden"
sleep 100
TrackMenu Curx%-100,Cury%
IF @MENUITEM(433)
Usecursor 2
Let EDITZähler&=0
Clearlist
ADDSTRING Fenstertitel$
Mientras que EDITZähler&<@GetLineCount(Edit&)
ADDSTRING @Getline$(EDIT&,Editzähler&)
Let EDITZähler&=Editzähler&+1
wend
@MoveListToEdit(Edit&)
Usecursor 0
setmenuitem 0
@setfocus(%HWND)
@GetAsyncKeyState(2)
endif
endif
endif
wend
... aber como du siehst, es el alles no tan completamente ideal. Kann uno como irgendwo todavía qué verbessern? |
| | | | |
| | | Nun, Yo finde folgende Variante wohl al ehrlichsten, verbraucht auch no 100%Rechenleistung, y habs veces rápidamente dahingepinselt:
{$crq}
declarar winlist$,wintit$,owintit$,vlb&,mov&,edit&,tmps$
windowtitle "Erfassen des Fenstertitels con Trackmenü"
Windowstyle 31+512
Ventana 0,0-640,400
setwindowpos %hwnd=0,0 - 640,400;-1
EDIT&:=@createmultiedit(%HWND,"",10,10,300,300)
vlb&:=createsortedlistbox(%hwnd,"",350,10,sub(width(%hwnd),370),300)
mov&:=createbutton(%hwnd,"<",315,10,30,300)
winlist$:=""
owintit$:=""
wintit$:=""
settimer 333
repeat
waitinput
pushtolist gettext$(getactivewindow())
if or(getfocus(vlb&),getfocus(mov&))
tmps$:=getstring$(vlb&,getcursel(vlb&))
if len(tmps$)
enablewindow mov&,1
if getfocus(mov&)
settext edit&,gettext$(edit&)+tmps$+chr$(13)+chr$(10)
setfocus(vlb&)
endif
más
enablewindow mov&,0
endif
más
enablewindow mov&,0
endif
until %key=2
killtimer
end
proc pushtolist
parámetros tx$
wintit$=lower$(trim$(tx$))
if len(wintit$)
if owintit$<>wintit$
owintit$:=wintit$
ifnot instr("°"+wintit$,winlist$)
winlist$:=winlist$+"°"+wintit$
addstring(vlb&,wintit$)
endif
endif
endif
ENDPROC
|
| | | | |
| | | ¡Hola IF...
Also doch correcto verstanden... Das sieht en cada Fall una todo Ecke mejor de como mi Concepto con el Trackmenü. Como mein Ventana aber ya bastante vollgepackt es, Será mejor que te va como wohl para esta Solución algo a eng voluntad. Yo mich deshalb vorerst veces para el verschiebbaren Fenstertitel entschieden. Como el Programa sowieso wohl sólo 2 Minuten al Stück se ejecuta, y dies sin el weitere aufwendige Programas laufen, Yo el Prozessorauslaustung sólo veces außer acht gelassen. Trotzdem vielen Dank para el Referencia - se tal vez todavía wichtig... |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 1 subscriber: |