Forum | | | | | allô alle zusammen...
je voudrais dans mon Programme qui Possibilité avons, une beliebigen Fenstertitel eines laufenden Programmes dans un mehrzeiliges Editierfeld aufzunehmen. comment würdet son à qui l'affaire herangehen? comment peux on cela logisch realisieren? quoi wäre qui beste Possibilité? Wäre pour jeden Vorschlag reconnaissant, Source sommes pas absolument nötig. |
| | | | |
| | | Avez- Du quelque chose comme?
{$cr}
declare a#,x%,y%,wnd&,me&
dim a#,8
def WindowFromPoint(2) !"User32", "WindowFromPoint"
def GetCursorPos(1) !"User32","GetCursorPos"
style de fenêtre 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 %clé
GetCursorPos(a#)
let x%=long(a#,0)
let y%=long(a#,4)
let Wnd&=WindowFromPoint(% X, y%)
settext me&, gettext$(Wnd&)
endif
until %clé=2
killtimer
dispose a#
end
|
| | | | |
| | | allô IF...
non, eigentlich pas. comment on à den Fenstertitel venez, sais je - mir fehlt une concept pour une logische Umsetzung.... dans meinem Programme gibt es un mehrzeiliges Editierfeld, dans cela on Fenstertitel eingeben peux, chez en Auftreten Windows automatisch herunterfährt. je voudrais eh bien den Anwender pas entier so viel écrivons laisser - es mais devrait pour den Anwender aussi nachvollziehbar son, quoi il là justement tut. j'ai déjà à une Possibilité mittels Trackmenü gedacht: Pour Droit sur une Fenstertitelzeile ouvrez sich un Trackmenü avec qui Option comme verbotenes Programme définir. maintenant beim écrivons fällt mir aussi encore quoi pour Drag and Drop un: par cela Drücken qui rechten Bouton de la souris peux on (seulement) qui Titelzeile des Fensters jusque meinem Programme sur cela Editierfeld tirer et là enlever par cela Loslassen qui Bouton de la souris enlever.
cela wären déjà la fois deux Sachen, qui programmtechnisch entier simple trop lösen sommes. Gibt es weitere Opportunités? quoi ist einleuchtender et besser trop servir? Gibt es irgendwelche Probleme avec einem Droit dans qui Titelzeile eines Fensters (autre Menüs, qui sich ouvrir... etc.)? |
| | | | |
| | | quoi hältst en, simple alle Fenêtre-Titles qui seulement irgendwie auftauchen simple dans un list trop 1faire, et daraus auswählbar trop faire. dans qui List pourrait un Titel, quel Grade comme Activewin ist.
Pratiquement:
cas oldactivewindowtitle<>activewindowtitle : pushtolist activewindowtitle |
| | | | |
| | | allô IF...
si je toi là maintenant richtig verstanden habe, voulais ego eigentlich so simple aussi pas avons . je hatte là plutôt à so quelque chose gedacht:
WINDOWTITLE "Fenstertitel dans Editbox ziehen"
Windowstyle 31
Fenêtre 0,0-640,400
Déclarer Cursor#,Curx&,Cury&,Windowhandle&,Windowhandle2&
Déclarer Fenstertitel$,EDIT&,EDITZähler&,TEST&,Test$
Déclarer 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)
Tandis que @equ(0,0)
IF @GetAsyncKeyState(2)<>0
Faible 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&)
Si Fenstertitel$<>»
Windowstyle 16
Laisser Drop&=@createwindow(%Desktop,Fenstertitel$,Curx&,Cury&,Breite&,0)
SetWindowPos %HWND=0,0-640,400;-1
Tandis 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&)
Si Windowhandle&<>0
@ScreenToClient(Windowhandle&,Cursor#)
LET Curx&=Long(Cursor#,0)
LET Cury&=Long(Cursor#,4)
LET Windowhandle3&=@ChildWindowFromPoint(Windowhandle&,Curx&,Cury&)
Cas Windowhandle3&<>0 : LET Windowhandle2&=Windowhandle3&
EndIf
Wend
@GetCursorPos(Cursor#)
let Curx&=long(Cursor#,0)
let Cury&=long(Cursor#,4)
LET Windowhandle&=@WindowFromPoint(Curx&,Cury&)
Si Windowhandle&<>0
@ScreenToClient(Windowhandle&,Cursor#)
LET Curx&=Long(Cursor#,0)
LET Cury&=Long(Cursor#,4)
LET Windowhandle3&=@ChildWindowFromPoint(Windowhandle&,Curx&,Cury&)
Cas Windowhandle3&<>0 : LET Windowhandle2&=Windowhandle3&
EndIf
IF Windowhandle2&=Edit&
Usecursor 2
Laisser EDITZähler&=0
Clearlist
ADDSTRING Fenstertitel$
Tandis que EDITZähler&<@GetLineCount(Edit&)
ADDSTRING @Getline$(EDIT&,Editzähler&)
Laisser EDITZähler&=Editzähler&+1
Wend
@MoveListToEdit(Edit&)
Usecursor 0
setmenuitem 0
@setfocus(%HWND)
endif
@destroywindow(Drop&)
endif
Dispose Cursor#
SetWindowPos %HWND=0,0-640,400;1
endif
Wend
... ou bien aussi so quoi:
WINDOWTITLE "Erfassen des Fenstertitels avec Trackmenü"
Windowstyle 31
Fenêtre 0,0-640,400
Déclarer Cursor#,Curx%,Cury%,Windowhandle&
Déclarer 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 à Editbox senden"
Tandis que @equ(0,0)
IF @GetAsyncKeyState(2)<>0
Faible Cursor#,8
@GetCursorPos(Cursor#)
let Curx%=long(Cursor#,0)
let Cury%=long(Cursor#,4)
Dispose Cursor#
LET Windowhandle&=@WindowFromPoint(Curx%,Cury%)
LET Fenstertitel$=@GetText $(Windowhandle&)
IF @neq$(Fenstertitel$,»)
CreateMenu
AppendMenu 433,"&Fenstertitel à Editbox senden"
sleep 100
TrackMenu Curx%-100,Cury%
IF @MENUITEM(433)
Usecursor 2
Laisser EDITZähler&=0
Clearlist
ADDSTRING Fenstertitel$
Tandis que EDITZähler&<@GetLineCount(Edit&)
ADDSTRING @Getline$(EDIT&,Editzähler&)
Laisser EDITZähler&=Editzähler&+1
Wend
@MoveListToEdit(Edit&)
Usecursor 0
setmenuitem 0
@setfocus(%HWND)
@GetAsyncKeyState(2)
endif
endif
endif
Wend
... mais comment tu vois, ca sera tout pas so entier ideal. peux on là irgendwo encore quoi améliorer? |
| | | | |
| | | eh bien, je trouve folgende variante wohl am ehrlichsten, usé aussi pas 100%Rechenleistung, et habs la fois vite dahingepinselt:
{$crq}
declare winlist$,wintit$,owintit$,vlb&,mov&,edit&,tmps$
windowtitle "Erfassen des Fenstertitels avec Trackmenü"
Windowstyle 31+512
Fenêtre 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())
si or(getfocus(vlb&),getfocus(mov&))
tmps$:=getstring$(vlb&,getcursel(vlb&))
si len(tmps$)
enablewindow mov&,1
si getfocus(mov&)
settext edit&,gettext$(edit&)+tmps$+chr$(13)+chr$(10)
setfocus(vlb&)
endif
d'autre
enablewindow mov&,0
endif
d'autre
enablewindow mov&,0
endif
until %clé=2
killtimer
end
proc pushtolist
parameters tx$
wintit$=lower$($ Trim(tx$))
si len(wintit$)
si owintit$<>wintit$
owintit$:=wintit$
ifnot instr("°"+wintit$,winlist$)
winlist$:=winlist$+"°"+wintit$
addstring(vlb&,wintit$)
endif
endif
endif
endproc
|
| | | | |
| | | allô IF...
alors doch richtig verstanden... cela sieht sur jeden le cas une ganze coin besser aus comme mon concept avec dem Trackmenü. là mon la fenêtre mais déjà assez vollgepackt ist, wirds là wohl pour cet Solution quelque chose trop eng volonté. je hab mich c'est pourquoi vorerst la fois pour den verschiebbaren Fenstertitel entschieden. là cela Programme sowieso wohl seulement 2 Minuten am Stück fonctionne, et ca sans cela weitere aufwendige Programme courir, habe je qui Prozessorauslaustung seulement la fois sauf huit gelassen. quand même vielen Dank pour den Hinweis - wird peut-être doch encore important... |
| | | | |
|
répondreOptions du sujet | 4.025 Views |
Themeninformationencet Thema hat 1 participant: |