ok, transparenz ändern im traymenü erweitert.
Beiträge von sc4ry
-
-
Hiho,
ich habe eine InputBox und der nur Zahlen (0-255) eingetragen werden sollen.
[autoit]
komischerweise gibt IsString bei Text und Zahlen immer 1 aus, IsNumber immer 0 ... wtf ?Do
[/autoit]
$InputBox = InputBox("Transparence", "Set Transparence for iDo (255 = Solid, 0 = Invisible)", $trans, Default, Default, Default, Default, Default, Default, $gui)
If @error = 1 Then ExitLoop
MsgBox(0, $IsString($inputbox), IsNumber($InputBox))
Until $InputBox >= 0 And $InputBox <= 255 -
ok =)
also, wenn du das tool startet, siehst du zwar das fenster, aber du kannst das fenster nicht verwenden, das es "durchklickbar" ist.
um das fenster zu bearbeiten (verschieben, einträge hinzufügen) musst du erst mit der linken maustaste auf das traysymbol klicken.dadurch wird dem fenster der "durchklickbar-status" entzogen und du kannst es bearbeiten (dann findest du auch im listview kontextmenü den eintrag "new").
wenn du wieder auf das traysymbol klickst, ist das fenster wieder "durchklickbar".
-
was meinst du genau?
du kannst erst etwas schreiben/editieren, wenn du das icon mit links anklickst.
ansonsten hast du auf dem screen ja das listview und unten die editbox.die inputboxen um inm listview was zu ändern/ergänzen bekommst du erst (und nur in der zeile) wenn du im kontextmenü "new" wählst
-
das kann ja jeder machen wie er will, einfach in die ini hinter Trans ne 255 schreiben, dann ist es zu 100% sichtbar.
aber es gibt ja viele desktopbilder-fetische, die wollen sich das sicher nicht durch so ein fenster zerstören lassen.ich gehöre zwar nicht zu den fetischen, aber das fenster als standard auf den desktop zu pinnen finde ich auch sehr störend. lieber schlicht = transparent =)
ok, standardmäßig steht der wert auf 200, aber wie gesagt, kann ja jeder selber anpassen =)
-
Hi,
EDIT: Transparenz kann nur über TrayMenü geändert werden.
auf anfrage von einem kumpel, der gerne seine neusten todos immer sichtbar auf dem desktop haben will, ist folgendes entstanden.
eine variable todo-liste in kombination mit einem kalender. das ganze ist recht schlicht und einfach gehalten, erfüllt jedoch seinen zweck.man kann das ganze auch für andere sachen verwenden, da man name und anzahl der spalten selbst bestimmten kann.
es erscheint ein fenster, das leicht transparent und durchklickbar ist und nicht in der taskleiste erscheint. das fenster ist quasi auf den desktop gepinnt. es enthält ein listview und ein editfeld, um schnell etwas zu notieren. die transparenz des fenster kann nur in der ini (0-255) geändert werden. als weitere option kann man das fenster noch OnTop setzen. diese einstellung wird nach einem neustart immer übernommen. mit einem linksklick auf das traysymbol wird der bearbeiten modus aktiviert. ein erneuter klick stellt den standardzustand wieder her (durchklickbar). das fenster kann im größe und position verändert werden (das editfeld behält seine größe jedoch bei). beide werte werden ebenfalls gespeichert und das fenster in diesem zustand beim neustart wieder hergestellt.
um einträge dem listview hinzuzufügen, gibt es ein kontextmenü, welches zeilen zufügt oder löscht. sobald eine zeile besteht (muss mindestens mit leerwerten gepflegt sein, kann man dies OnTheFly editierten (doppelklick).zusätzlich hat man die möglichkeit, einen kalender mit 12 monaten anzeigen zu lassen. dieser ist auch durchklickbar und die transparent kann auch nur in der ini angepasst werden. einstellung zur anzeige und OnTop werden ebenfalls übernommen, genau wie die position. kalender kann wahlweise noch klickbar gemacht werden (man kann in den monaten switchen) oder aktiviert werden (fenster kann verschoben werden). postition wird gespeichert, die größe bleibt jedoch fix.
vllt kann jmd was damit anfangen =)
Spoiler anzeigen
[autoit]#include <Misc.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Date.au3>
#include <DateTimeConstants.au3>
#include <Array.au3>
#include <StaticConstants.au3>
#include <StructureConstants.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=C:\Documents and Settings\plutod\My Documents\to_do_450.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <WinAPI.au3>
#include <Constants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>TraySetClick(8)
[/autoit] [autoit][/autoit] [autoit]
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "_ToogleMain")
Opt("TrayMenuMode",1) ;0=append, 1=no default menu, 2=no automatic check, 4=menuitemID not return
Opt("TrayOnEventMode",1) ;0=disable, 1=enableOpt("GUIOnEventMode", 1) ;0=disabled, 1=OnEvent mode enabled
[/autoit] [autoit][/autoit] [autoit]
Opt("GUICloseOnESC", 0) ;1=ESC closes, 0=ESC won't close
;~ Opt("OnExitFunc","_Exit2")Global $currentItem[2], $title, $currentOpt[2] = ["none"]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $Style = True, $StyleC = True, $Resist = True, $ContextM$TM = TrayCreateMenu("Kalender")
[/autoit] [autoit][/autoit] [autoit]
$TTop1 = TrayCreateItem("Show", $TM)
TrayItemSetOnEvent(-1, "_ToogleCalender")
TrayCreateItem("")
$TTop2 = TrayCreateItem("Top", $TM)
TrayItemSetOnEvent(-1, "_TopCalender")
$TTop3 = TrayCreateItem("Resist", $TM)
TrayItemSetOnEvent(-1, "_ResistCalender")
TrayItemSetState(-1, 1)
$TTop4 = TrayCreateItem("Activate", $TM)
TrayItemSetOnEvent(-1, "_ActivateCalender")
$TTop5 = TrayCreateItem("Transparence", $TM)
TrayItemSetOnEvent(-1, "_SetCalTrans")
$TTop = TrayCreateItem("Top")
TrayItemSetOnEvent(-1, "_Top")
$TTop6 = TrayCreateItem("Transparence")
TrayItemSetOnEvent(-1, "_SetTrans")
TrayCreateItem("")
TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "_Exit")
$x = IniRead("Settings.ini", "Window", "x", "-1")
$y = IniRead("Settings.ini", "Window", "y", "-1")
$w = IniRead("Settings.ini", "Window", "weight", "450")
$h = IniRead("Settings.ini", "Window", "height", "250")
$trans = IniRead("Settings.ini", "Window", "Trans", "")
If $trans = 0 Then
IniWrite("Settings.ini", "Window", "Trans", "200")
$trans = 200
EndIf
$Top = IniRead("Settings.ini", "Window", "Top", "0")
$CalTrans = IniRead("Settings.ini", "Kalender", "Trans", "")
If $CalTrans = 0 Then
IniWrite("Settings.ini", "Kalender", "Trans", "200")
$CalTrans = 150
EndIf
$CalTop = IniRead("Settings.ini", "Kalender", "Top", "0")
$CalShou = IniRead("Settings.ini", "Kalender", "Show", "0")
$xc = IniRead("Settings.ini", "Kalender", "x", "-1")
$yc = IniRead("Settings.ini", "Kalender", "y", "-1")$gui = GUICreate("", $w, $h, $x, $y, BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), $WS_EX_TOOLWINDOW)
[/autoit] [autoit][/autoit] [autoit]
$list = GUICtrlCreateListView("", 0, 1, $w, $h - 72, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
$Columns = IniReadSection("Settings.ini", "Columns")
If Not @error Then
For $i = 1 To $Columns[0][0]
_GUICtrlListView_AddColumn($list, $Columns[$i][0], $Columns[$i][1])
Next
Else
For $i = 1 To 4
_GUICtrlListView_AddColumn($list, "Spalte " & $i, 100)
IniWrite("Settings.ini", "Columns", "Spalte " & $i, "100")
Next
EndIf
$ContextM = GUICtrlCreateContextMenu($list)
$ContextI = GUICtrlCreateMenuItem("new", $ContextM)
GUICtrlSetOnEvent(-1, "_AddNewLine")
GUICtrlSetState(-1, $GUI_DISABLE)
$ContextII = GUICtrlCreateMenuItem("delete", $ContextM)
GUICtrlSetOnEvent(-1, "_DeleteLine")
GUICtrlSetState(-1, $GUI_DISABLE)
$edit = GUICtrlCreateEdit("", 0, $h - 70, $w + 20, 90, BitOR($ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $WS_VSCROLL, $WS_HSCROLL))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT )WinSetTrans($gui, "", $trans)
[/autoit] [autoit][/autoit] [autoit]
If $Top = 1 Then
WinSetOnTop($gui, "", 1)
TrayItemSetState($TTop, 1)
EndIf_GUICtrlEdit_SetText(GUICtrlGetHandle($edit), StringReplace(IniRead("Settings.ini", "Msg", "Msg", ""), "[CRLF]" ,@CRLF))
[/autoit] [autoit][/autoit] [autoit]
$IniReadSection = IniReadSection("Settings.ini", "ColumnValue")
If Not @error Then
For $i = 1 To $IniReadSection[0][0]
GUICtrlCreateListViewItem($IniReadSection[$i][1], $list)
Next
EndIf$EditBox = GUICreate('', 200, 30, -1, -1, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
[/autoit] [autoit][/autoit] [autoit]
$dummy = GUICtrlCreateDummy()
$hEdit = GUICtrlCreateInput('', 5, 5, 190, 20, $SS_CENTER)
;~ HotKeySet('{ESC}', '_EscEdit')
Global $AccelKeys[1][2]=[["{ENTER}", $dummy]]
GUICtrlSetOnEvent($dummy, "_EditEnter")
GUISetAccelerators($AccelKeys)GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($list)]
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("", 508, 647, $xc, $yc, BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), $WS_EX_TOOLWINDOW)
[/autoit] [autoit][/autoit] [autoit]
$MonthCal1 = GUICtrlCreateMonthCal(_DateAdd( 'm',-4, _NowCalcDate()), 0, 2, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal2 = GUICtrlCreateMonthCal(_DateAdd( 'm',-3, _NowCalcDate()), 168, 2, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal3 = GUICtrlCreateMonthCal(_DateAdd( 'm',-2, _NowCalcDate()), 336, 2, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal4 = GUICtrlCreateMonthCal(_DateAdd( 'm',-1, _NowCalcDate()), 0, 162, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal5 = GUICtrlCreateMonthCal(_NowCalcDate(), 168, 162, 170, 161)
$MonthCal6 = GUICtrlCreateMonthCal(_DateAdd( 'm',1, _NowCalcDate()), 336, 162, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal7 = GUICtrlCreateMonthCal(_DateAdd( 'm',2, _NowCalcDate()), 0, 322, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal8 = GUICtrlCreateMonthCal(_DateAdd( 'm',3, _NowCalcDate()), 168, 322, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal9 = GUICtrlCreateMonthCal(_DateAdd( 'm',4, _NowCalcDate()), 336, 322, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal10 = GUICtrlCreateMonthCal(_DateAdd( 'm',5, _NowCalcDate()), 0, 482, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal11 = GUICtrlCreateMonthCal(_DateAdd( 'm',6, _NowCalcDate()), 168, 482, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))
$MonthCal12 = GUICtrlCreateMonthCal(_DateAdd( 'm',7, _NowCalcDate()), 336, 482, 170, 161, BitOR($MCS_WEEKNUMBERS, $MCS_NOTODAYCIRCLE, $MCS_NOTODAY))WinSetTrans($Form1, "", $CalTrans)
[/autoit] [autoit][/autoit] [autoit]
If $CalTop = 1 Then
WinSetOnTop($Form1, "", 1)
TrayItemSetState($TTop2, 1)
EndIfIf $CalShou = 1 Then
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $Form1)
TrayItemSetState($TTop1, 1)
EndIf_Win_SetClickThrough($Form1, "", 1)
[/autoit] [autoit][/autoit] [autoit]
_Win_SetClickThrough($gui, "", 1)GUISetState(@SW_SHOW, $gui)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
If WinGetState($EditBox) = 15 And _IsPressed("1B") Then GUISetState(@SW_HIDE, $EditBox)
If WinGetState($gui) = 15 And _IsPressed("1B") Then GUISetState(@SW_HIDE, $EditBox)
WEndFunc _ToogleMain()
[/autoit] [autoit][/autoit] [autoit]
If $Style = True Then
WinActivate($gui)
_Win_SetClickThrough($gui, "", False)
GUISetStyle(BitOR($WS_MINIMIZEBOX, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX, $WS_THICKFRAME), -1, $gui)
$Style = False
Else
_Win_SetClickThrough($gui, "", True)
GUISetStyle(BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), -1, $gui)
$Style = True
EndIf
EndFuncFunc _ToogleCalender()
[/autoit] [autoit][/autoit] [autoit]
$WinGetState = WinGetState($Form1)
If $WinGetState = 7 Then
GUISetState(@SW_HIDE, $Form1)
IniWrite("Settings.ini", "Kalender", "Show", "0")
TrayItemSetState($TTop1, 4)
Else
GUISetState(@SW_SHOW, $Form1)
IniWrite("Settings.ini", "Kalender", "Show", "1")
TrayItemSetState($TTop1, 1)
EndIf
EndFuncFunc _ActivateCalender()
[/autoit] [autoit][/autoit] [autoit]
If $StyleC = True Then
GUISetState(@SW_SHOW, $Form1)
WinActivate($Form1)
_Win_SetClickThrough($Form1, "", False)
GUISetStyle(BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU), -1, $Form1)
$StyleC = False
TrayItemSetState($TTop3, 4)
TrayItemSetState($TTop4, 1)
Else
_Win_SetClickThrough($Form1, "", True)
GUISetStyle(BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), -1, $Form1)
$StyleC = True
TrayItemSetState($TTop3, 1)
TrayItemSetState($TTop4, 4)
EndIf
EndFuncFunc _Top()
[/autoit] [autoit][/autoit] [autoit]
$WinIsOnTop = _WinIsOnTop($gui)
If $WinIsOnTop = 1 Then
WinSetOnTop($gui, "", 0)
IniWrite("Settings.ini", "Window", "Top", "0")
TrayItemSetState($TTop, 4)
Else
WinSetOnTop($gui, "", 1)
IniWrite("Settings.ini", "Window", "Top", "1")
TrayItemSetState($TTop, 1)
EndIf
EndFuncFunc _TopCalender()
[/autoit] [autoit][/autoit] [autoit]
$WinIsOnTop = _WinIsOnTop($Form1)
If $WinIsOnTop = 1 Then
WinSetOnTop($Form1, "", 0)
IniWrite("Settings.ini", "Kalender", "Top", "0")
TrayItemSetState($TTop2, 4)
Else
WinSetOnTop($Form1, "", 1)
IniWrite("Settings.ini", "Kalender", "Top", "1")
TrayItemSetState($TTop2, 1)
EndIf
EndFuncFunc _ResistCalender()
[/autoit] [autoit][/autoit] [autoit]
If $Resist = True Then
_Win_SetClickThrough($Form1, "", False)
TrayItemSetState($TTop3, 4)
$Resist = False
Else
_Win_SetClickThrough($Form1, "", True)
TrayItemSetState($TTop3, 1)
$Resist = True
EndIf
EndFuncFunc _SetTrans()
[/autoit] [autoit][/autoit] [autoit]
Do
$InputBox = InputBox("Transparence", "Set Transparence for iDo (255 = Solid, 0 = Invisible)", $trans, Default, 300, 100, Default, Default, Default, $gui)
Until @error Or StringIsInt($InputBox) And Int($InputBox) >= 0 And Int($InputBox) <= 255
If StringIsInt($InputBox) And Int($InputBox) >= 0 And Int($InputBox) <= 255 Then
IniWrite("Settings.ini", "Window", "Trans", $InputBox)
WinSetTrans($gui, "", $InputBox)
$trans = $InputBox
EndIf
GUISetState(@SW_RESTORE, $gui)
EndFuncFunc _SetCalTrans()
[/autoit] [autoit][/autoit] [autoit]
Do
$InputBox = InputBox("Transparence", "Set Transparence for iDo (255 = Solid, 0 = Invisible)", $CalTrans, Default, 300, 100, Default, Default, Default, $Form1)
Until @error Or StringIsInt($InputBox) And Int($InputBox) >= 0 And Int($InputBox) <= 255
If StringIsInt($InputBox) And Int($InputBox) >= 0 And Int($InputBox) <= 255 Then
IniWrite("Settings.ini", "Kalender", "Trans", $InputBox)
WinSetTrans($Form1, "", $InputBox)
$CalTrans = $InputBox
EndIf
GUISetState(@SW_RESTORE, $Form1)
EndFuncFunc _AddNewLine()
[/autoit] [autoit][/autoit] [autoit]
$GetColumnCount = _GUICtrlListView_GetColumnCount($list)
$addnew = "new"
For $j = 1 to $GetColumnCount - 1
$addnew &= "|"
Next
GUICtrlCreateListViewItem($addnew, $list)
GUICtrlSetState($ContextI, $GUI_DISABLE)
GUICtrlSetState($ContextII, $GUI_DISABLE)
EndFuncFunc _DeleteLine()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_DeleteItem($list, _GUICtrlListView_GetSelectedIndices($list))
IniDelete("Settings.ini", "ColumnValue", _GUICtrlListView_GetSelectedIndices($list))
GUICtrlSetState($ContextI, $GUI_DISABLE)
GUICtrlSetState($ContextII, $GUI_DISABLE)
EndFuncFunc _Exit()
[/autoit] [autoit][/autoit] [autoit]
$WinGetPos = WinGetPos($Form1)
If Not @error Then
IniWrite("Settings.ini", "Kalender", "x", $WinGetPos[0])
IniWrite("Settings.ini", "Kalender", "y", $WinGetPos[1])
EndIf
$WinGetPos = WinGetPos($gui)
If Not @error Then
IniWrite("Settings.ini", "Window", "x", $WinGetPos[0])
IniWrite("Settings.ini", "Window", "y", $WinGetPos[1])
IniWrite("Settings.ini", "Window", "weight", $WinGetPos[2] -
IniWrite("Settings.ini", "Window", "height", $WinGetPos[3] -
EndIf
IniWrite("Settings.ini", "Msg", "Msg", StringReplace(_GUICtrlEdit_GetText(GUICtrlGetHandle($edit)), @CRLF, "[CRLF]"))
For $i = 0 To _GUICtrlListView_GetItemCount($list) - 1
IniWrite("Settings.ini", "ColumnValue", $i, _GUICtrlListView_GetItemTextString($list, $i))
Next
Exit
EndFuncFunc _WinIsOnTop($WindowHandle)
[/autoit] [autoit][/autoit] [autoit]
Local $long = _WinAPI_GetWindowLong(WinGetHandle($WindowHandle),$GWL_EXSTYLE)
Return BitAND($long,8)=8 ; $WS_EX_TOPMOST = 8
EndFunc ; Author(s): Prog@ndyFunc _WindowIsResist($handle)
[/autoit] [autoit][/autoit] [autoit]
$Style = _WinAPI_GetWindowLong($handle,$GWL_EXSTYLE)
If BitAND($Style,$WS_EX_TRANSPARENT) = $WS_EX_TRANSPARENT And BitAND($Style,$WS_EX_LAYERED) = $WS_EX_LAYERED Then
Return 0
Else
Return 1
EndIf
EndFunc ; Author: Prog@ndy
Func _Win_SetClickThrough($title,$text = "",$noclic = True)
Local $hWnd = WinGetHandle($title,$text)
If @error Then Return SetError(1,0,0)
If $noclic Then
_WinAPI_SetWindowLong($hWnd,$GWL_EXSTYLE,BitOR(_WinAPI_GetWindowLong($hWnd,$GWL_EXSTYLE),$WS_EX_TRANSPARENT))
If @error Then Return SetError(2,0,0)
Else
_WinAPI_SetWindowLong($hWnd,$GWL_EXSTYLE,BitAND(_WinAPI_GetWindowLong($hWnd,$GWL_EXSTYLE),BitNOT($WS_EX_TRANSPARENT)))
If @error Then Return SetError(2,0,0)
EndIf
Return 1
EndFunc ; Author(s): Prog@ndyFunc _LeftDblClick($Info)
[/autoit] [autoit][/autoit] [autoit]
If $Info[3] = -1 Then Return
If $currentOpt[0] = "none" Then
$currentOpt[0] = Opt('GUICoordMode', 1)
$currentOpt[1] = Opt("GUIOnEventMode", 1)
EndIf
GUICtrlSetOnEvent($hEdit, '_EditEnter')
_GUICtrlListView_SetSelectedColumn($Info[1], $Info[4])
$title = WinGetTitle($GUI)
Local $mouse = MouseGetPos(), $posEdit = WinGetPos($EditBox)
Local $posGUI = WinGetPos($GUI), $posLV = ControlGetPos($GUI, '', $list)
Local $colInfo = _GUICtrlListView_GetColumn($Info[1], $Info[4]), $sumWidth = 0, $tmp
WinSetTitle($GUI, '', 'Editiere: Zeile ' & $Info[3]+1 & ', ' & $colInfo[5])
For $i = 0 To $Info[4]
$tmp = _GUICtrlListView_GetColumn($Info[1], $i)
$sumWidth += $tmp[4]
Next
$sumWidth -= $colInfo[4]
Local $xPos = $posGUI[0]+$posLV[0]+$sumWidth
If $xPos+$colInfo[4]+10 > @DesktopWidth Then $xPos = @DesktopWidth - ($colInfo[4] + 10)
If $xPos < 0 Then $xPos = 0
WinMove($EditBox, '', $xPos, $mouse[1]-$posEdit[3], $colInfo[4]+10)
GUICtrlSetData($hEdit, _GUICtrlListView_GetItemText($Info[1], $Info[3], $Info[4]))
$currentItem[0] = $Info[3]
$currentItem[1] = $Info[4]
GUISetState(@SW_SHOW, $EditBox)
EndFuncFunc _EscEdit()
[/autoit] [autoit][/autoit] [autoit]
WinSetTitle($GUI, '', $title)
Opt('GUICoordMode', $currentOpt[0])
Opt("GUIOnEventMode", $currentOpt[1])
$currentOpt[0] = "none"
GUISetState(@SW_HIDE, $EditBox)
EndFuncFunc _EditEnter()
[/autoit] [autoit][/autoit] [autoit]
WinSetTitle($GUI, '', $title)
Opt('GUICoordMode', $currentOpt[0])
Opt("GUIOnEventMode", $currentOpt[1])
$currentOpt[0] = "none"
_GUICtrlListView_SetItemText($list, $currentItem[0], GUICtrlRead($hEdit), $currentItem[1])
GUISetState(@SW_HIDE, $EditBox)
EndFuncFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $list ; ID des LV
If Not IsHWnd($list) Then $hWndListView = GUICtrlGetHandle($list) ; ID des LV
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_DBLCLK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[5] = [$hWndFrom, $iIDFrom, $iCode, DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem")]
_LeftDblClick($aInfo)
Case $LVN_COLUMNCLICK ; A column was clicked
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($list, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
If IsHWnd($ContextM) Then GUICtrlDelete($ContextM)
If _GUICtrlListView_GetItemSelected(GUICtrlGetHandle($list), _GUICtrlListView_GetSelectedIndices($list)) = 1 Then
GUICtrlSetState($ContextI, $GUI_ENABLE)
GUICtrlSetState($ContextII, $GUI_ENABLE)
Else
GUICtrlSetState($ContextI, $GUI_ENABLE)
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
das ist ne gute idee.
mir ist aber noch was aufgefallen.
wenn ich leere zellen generiere und dort einen doppelklick mache, kommt das Edit-Fenster sofort.
ist jedoch ein wert in der zelle, poppt das fenster beim ersten doppelklick nur kurz auf, beim 2ten mal funzt es dann richtig.kann das wer bestätigen?
bzw wenn ich nen eintrag mache und dann nochmal editieren will, iwie ...
-
genau so ... aber kann man da nicht auch was machen?
-
ehrlich gesagt versteh ich das nicht =/
kann ich damit dieses fenster verschieben?
[autoit]$gui = GUICreate("", $w, $h, $x, $y, BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), $WS_EX_TOOLWINDOW)
[/autoit]
$list = GUICtrlCreateListView("", 0, 1, $w, $h - 72, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
$Columns = IniReadSection("Settings.ini", "Columns")
If Not @error Then
For $i = 1 To $Columns[0][0]
_GUICtrlListView_AddColumn($list, $Columns[$i][0], $Columns[$i][1])
Next
Else
For $i = 1 To 4
_GUICtrlListView_AddColumn($list, "Spalte " & $i, 100)
IniWrite("Settings.ini", "Columns", "Spalte " & $i, "100")
Next
EndIf
$edit = GUICtrlCreateEdit("", 0, 180, $w + 20, $h - 160, BitOR($ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $WS_VSCROLL, $WS_HSCROLL))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT ) -
das problem ist ja, ich habe nur 1 fenster, das aber keinen title hat, also nichts zum anpacken zum verschieben. darum funktioniert das auch nicht. aber so wie ich es jetzt habe, reicht mir das schon =)
-
thx bert, wenn ich die editbox $GUI_DOCKHEIGHT setze und die listbox $GUI_DOCKBOTTOM, dann klappt es =)
fehlt nur noch was, zum verschieben des fensters. GuiSetStyle wäre ja ok, wenn man zw 2 Styles switchen könnte (einer mit Title, einer ohne Title) ... aber das scheint das Tool nicht zu checken.
EDIT:
habs jetzt mitm flag gemacht, dann kann er weinigstens nicht meckern
[autoit]Func _ToogleMain()
[/autoit]
If $Style = True Then
WinActivate($gui)
_Win_SetClickThrough($gui, "", False)
GUISetStyle(BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU), -1, $gui)
$Style = False
Else
_Win_SetClickThrough($gui, "", True)
GUISetStyle(BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), -1, $gui)
$Style = True
EndIf
EndFuncdas fenster kann danach verschoben werden, auch wenn kein TITLE da ist.
-
geht das auch im OnEventMode?
-
Hiho,
2 Probs:
1. ich habe ein fesnter mit folgenden styles
[autoit]$gui = GUICreate("", $w, $h, $x, $y, BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), $WS_EX_TOOLWINDOW)
[/autoit]wie kann ich das fenster jetzt verschieben? im mom geht das nur übers resizen, ist zwar ok, aber nicht soooo praktisch. mit guisetstyle habe ich schon rumprobiert, von oben genannten style auf den standardstyle zu springen, in der hoffnung, dass ein fensterkopf erscheint. das passiert zwar nicht, aber ich kann das fenster trotzdem verschieben. jedoch kann ich den style nicht mehr auf den von oben zurücksetzten, ka wieso.
2. im gleichen fenster habe ich ein listview und ein editfeld. wenn ich das fenster nun resize, wird der abstand zw den beiden ctrl immer größer und kleiner. kann man das machen, dass der gleich bleibt?
[autoit]$gui = GUICreate("", $w, $h, $x, $y, BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), $WS_EX_TOOLWINDOW)
[/autoit]
$list = GUICtrlCreateListView("", 0, 0, $w, $h - 51, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHCENTER)
$edit = GUICtrlCreateEdit("", 0, 200, $w + 20, $h - 180, BitOR($ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $WS_VSCROLL, $WS_HSCROLL))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER) -
hmm, jetzt läufts, gestern hab ich 3 -4 sachen probiert und es wollte nicht .. kein plan, aber thx 4 help
[autoit]
[/autoit]
...
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($list)]
...
Case $LVN_COLUMNCLICK ; A column was clicked
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($list, $B_DESCENDING, DllStructGetData($tInfo, "SubItem")) -
thx, das hilft schonmal weiter, ausser das man damit (noch) nicht leere zellen editieren kann.
hast du schon was wg sortieren rausbekommen? es will einfach net *grml*
-
[Edit BugFix: Da sich das zu einem längeren Thread entwickelt, habe ich es aus den Skripten verschoben.]
Hey,
das script ist wirklich ne tolle sache, auch das man jetzt das fenster mit ENTER wieder schließen kann.
Aber eine andere Sache, was mache ich, wenn ich eine leere Zelle editieren will? Dann reagiert das Script leider nicht.
Kann man da noch was machen?Schonmal THX und weiter so =)
-
ok, ich hab mal ne ganz einfach lösung =)
[autoit]$gui = GUICreate("", $w, $h, $x, $y, BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), $WS_EX_TOOLWINDOW)
[/autoit]
$edit = GUICtrlCreateEdit("", 0, 200, $w + 20, $h - 180, BitOR($ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $WS_VSCROLL, $WS_HSCROLL))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER)ich erstelle das edit fenster einfach in der größe + 20 mehr als das fenster, somit werden die balken nicht angezeigt, sind aber da und damit auch das mausrad nutzbar =)
so einfach gehts *g*
-
Hiho,
also eigentlich habe ich es schon in mehreren scripten drin, sowohl die varianten als auch andere, dich ich hier aus dem forum angewandt haben, sortieren mein listview nicht mehr. vllt kann mir helfen, was am script banane ist, dass es nicht geht.
zusätzlich habe ich noch die frage, was ich machen muss, damit ich die einzelnen zellen im listview direkt im listview ändern kann. wenn ich 3 mal in ne zelle klicke, kann ich zwar was eingeben, das wird aber nicht übernommen.
hier das script:
Spoiler anzeigen
[autoit]#include <GuiListView.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=C:\Documents and Settings\plutod\My Documents\to_do_450.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <WinAPI.au3>
#include <Constants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>TraySetClick(8)
[/autoit] [autoit][/autoit] [autoit]
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "_ToogleMain")
Opt("TrayMenuMode",1) ;0=append, 1=no default menu, 2=no automatic check, 4=menuitemID not return
Opt("TrayOnEventMode",1) ;0=disable, 1=enableOpt("GUICloseOnESC", 0) ;1=ESC closes, 0=ESC won't close
[/autoit] [autoit][/autoit] [autoit]
;~ Opt("OnExitFunc","_Exit2")$TTop = TrayCreateItem("Top")
[/autoit] [autoit][/autoit] [autoit]
TrayItemSetOnEvent(-1, "_Top")
TrayCreateItem("")
TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "_Exit")
$x = IniRead("Settings.ini", "Window", "x", "-1")
$y = IniRead("Settings.ini", "Window", "y", "-1")
$w = IniRead("Settings.ini", "Window", "weight", "450")
$h = IniRead("Settings.ini", "Window", "height", "250")
$trans = IniRead("Settings.ini", "Window", "Trans", "")
If $trans = 0 Then
IniWrite("Settings.ini", "Window", "Trans", "200")
$trans = 200
EndIf
$Top = IniRead("Settings.ini", "Window", "Top", "0")$gui = GUICreate("", $w, $h, $x, $y, BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), $WS_EX_TOOLWINDOW)
[/autoit] [autoit][/autoit] [autoit]
$list = GUICtrlCreateListView("", 0, 0, $w, $h - 51, BitOR($LVS_EDITLABELS, $LVS_SHOWSELALWAYS, $LVS_SINGLESEL), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHCENTER)
$Columns = IniReadSection("Settings.ini", "Columns")
If Not @error Then
For $i = 1 To $Columns[0][0]
_GUICtrlListView_AddColumn($list, $Columns[$i][0], $Columns[$i][1])
Next
Else
For $i = 1 To 4
_GUICtrlListView_AddColumn($list, "Spalte " & $i, 100)
IniWrite("Settings.ini", "Columns", "Spalte " & $i, "100")
Next
EndIf
$edit = GUICtrlCreateEdit("", 0, 200, $w, $h - 200, BitOR($ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER)WinSetTrans($gui, "", $trans)
[/autoit] [autoit][/autoit] [autoit]
If $Top = 1 Then
WinSetOnTop($gui, "", 1)
TrayItemSetState($TTop, 1)
EndIf_GUICtrlEdit_SetText(GUICtrlGetHandle($edit), StringReplace(IniRead("Settings.ini", "Msg", "Msg", ""), "[CRLF]" ,@CRLF))
[/autoit] [autoit][/autoit] [autoit]Dim $array[2][2]
[/autoit] [autoit][/autoit] [autoit]
$array[0][0] = "A"
$array[0][1] = "bla"
$array[1][0] = "Z"
$array[1][1] = "test"
_GUICtrlListView_AddArray($list, $array)_Win_SetClickThrough($gui, "", 1)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _ToogleMain()
[/autoit] [autoit][/autoit] [autoit]
$WinIsResist = _WindowIsResist($gui)
If $WinIsResist = 0 Then
GUISetState(@SW_RESTORE)
_Win_SetClickThrough($gui, "", False)
Else
_Win_SetClickThrough($gui, "", True)
EndIf
EndFuncFunc _Top()
[/autoit] [autoit][/autoit] [autoit]
$WinIsOnTop = _WinIsOnTop($gui)
If $WinIsOnTop = 1 Then
WinSetOnTop($gui, "", 0)
IniWrite("Settings.ini", "Window", "Top", "0")
TrayItemSetState($TTop, 4)
Else
WinSetOnTop($gui, "", 1)
IniWrite("Settings.ini", "Window", "Top", "1")
TrayItemSetState($TTop, 1)
EndIf
EndFuncFunc _Exit()
[/autoit] [autoit][/autoit] [autoit]
$WinGetPos = WinGetPos($gui)
If Not @error Then
IniWrite("Settings.ini", "Window", "x", $WinGetPos[0])
IniWrite("Settings.ini", "Window", "y", $WinGetPos[1])
IniWrite("Settings.ini", "Window", "weight", $WinGetPos[2] -
IniWrite("Settings.ini", "Window", "height", $WinGetPos[3] -
EndIf
IniWrite("Settings.ini", "Msg", "Msg", StringReplace(_GUICtrlEdit_GetText(GUICtrlGetHandle($edit)), @CRLF, "[CRLF]"))
Exit
EndFuncFunc _WinIsOnTop($WindowHandle)
[/autoit] [autoit][/autoit] [autoit]
Local $long = _WinAPI_GetWindowLong(WinGetHandle($WindowHandle),$GWL_EXSTYLE)
Return BitAND($long,8)=8 ; $WS_EX_TOPMOST = 8
EndFunc ; Author(s): Prog@ndyFunc _WindowIsResist($handle)
[/autoit]
$Style = _WinAPI_GetWindowLong($handle,$GWL_EXSTYLE)
If BitAND($Style,$WS_EX_TRANSPARENT) = $WS_EX_TRANSPARENT And BitAND($Style,$WS_EX_LAYERED) = $WS_EX_LAYERED Then
Return 0
Else
Return 1
EndIf
EndFunc ; Author: Prog@ndy
Func _Win_SetClickThrough($title,$text = "",$noclic = True)
Local $hWnd = WinGetHandle($title,$text)
If @error Then Return SetError(1,0,0)
If $noclic Then
_WinAPI_SetWindowLong($hWnd,$GWL_EXSTYLE,BitOR(_WinAPI_GetWindowLong($hWnd,$GWL_EXSTYLE),$WS_EX_TRANSPARENT))
If @error Then Return SetError(2,0,0)
Else
_WinAPI_SetWindowLong($hWnd,$GWL_EXSTYLE,BitAND(_WinAPI_GetWindowLong($hWnd,$GWL_EXSTYLE),BitNOT($WS_EX_TRANSPARENT)))
If @error Then Return SetError(2,0,0)
EndIf
Return 1
EndFunc ; Author(s): Prog@ndy -
hmm sorry, ich glaub wir verstehen uns immer noch nicht *g*
die normale funktionalität der edit box ist iO.
ich würde die box gerne so erstellen
[autoit]GUICtrlCreateEdit("", 0, 200, $w, $h - 200, BitOR($ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
[/autoit]also ohne $WS_VSCROLL, $WS_HSCROLL.
wenn nun aber viel text in der box steht, sollen die leisten doch angezeigt werden.
-
wenn ich ein edit-ctrl erstelle, habe ich ausgeraut einen horizontlen und vertikalen balken. sobald ich nun mehr schreibe, als im editfeld horitontal oder vertikal angezeigt werden kann, werden die balken aktiv und ich kann nach links/rechts und/oder oben/unten scrollen, auch mit der maus.
wenn ich $WS_VSCROLL, $WS_HSCROLL als style weglasse, erscheinen die balken nicht mehr, auch nicht, wenn ich wieder über das editfeld hinaus schreibe und man kann nicht mit der maus scrollen.
ich möchte das die balken erst nicht angezeigt werden, es sei denn, der text im feld geht über die grenzen.
hoffe das ist verständlichen =)