; --------------------------------------------------------------------------------------------; Copyright (c) Fantaisie Software. All rights reserved.; Dual licensed under the GPL and Fantaisie Software licenses.; See LICENSE and LICENSE-FANTAISIE in the project root for license information.; --------------------------------------------------------------------------------------------;windows onlyCompilerIf #CompileWindowsProcedure ShowWindowMaximized(Window)ShowWindow_(WindowID(Window), #SW_MAXIMIZE)EndProcedureProcedure IsWindowMaximized(Window)ProcedureReturn IsZoomed_(WindowID(Window))EndProcedureProcedure IsWindowMinimized(Window)ProcedureReturn IsIconic_(WindowID(Window))EndProcedureProcedure SetWindowForeground(Window)If GetWindowLongPtr_(WindowID(Window), #GWL_STYLE) & #WS_MINIMIZEShowWindow_(WindowID(Window), #SW_RESTORE)EndIfBringWindowToTop_(WindowID(Window))SetForegroundWindow_(WindowID(Window))SetActiveWindow(Window)EndProcedureProcedure SetWindowForeground_NoActivate(Window)SetWindowPos_(WindowID(Window), #HWND_TOP, 0,0,0,0, #SWP_NOACTIVATE|#SWP_NOMOVE|#SWP_NOOWNERZORDER|#SWP_NOSIZE)EndProcedure; windows only, force window to the foreground;; NOTE: This function is dangerous and can cause the IDE to hang.; Use this only when there is no other option.; (currently used only by AddTools.pb and by the Commiunication.pb in the Debugger);Procedure SetWindowForeground_Real(Window)hWnd = WindowID(Window)If GetWindowLongPtr_(hWnd, #GWL_STYLE) & #WS_MINIMIZEShowWindow_(hWnd, #SW_RESTORE)EndIf; Check To see If we are the foreground threadforegroundThreadID = GetWindowThreadProcessId_(GetForegroundWindow_(), 0)ourThreadID = GetCurrentThreadId_(); If not, attach our thread's 'input' to the foreground thread'sIf (foregroundThreadID <> ourThreadID)AttachThreadInput_(foregroundThreadID, ourThreadID, #True);EndIf; Bring our window To the foregroundSetForegroundWindow_(hWnd); If we attached our thread, detach it nowIf (foregroundThreadID <> ourThreadID)AttachThreadInput_(foregroundThreadID, ourThreadID, #False)EndIf; Needed to redraw the frame, as the window is activated but the frame stay in inactive color (at least on XP)RedrawWindow_(hWnd, #Null, #Null, #RDW_FRAME | #RDW_INVALIDATE)EndProcedureProcedure SetWindowStayOnTop(Window, StayOnTop)If StayOnTopSetWindowPos_(WindowID(Window), #HWND_TOPMOST , 0, 0, 0, 0, #SWP_NOSIZE |#SWP_NOMOVE)ElseSetWindowPos_(WindowID(Window), #HWND_NOTOPMOST , 0, 0, 0, 0, #SWP_NOSIZE |#SWP_NOMOVE)EndIfEndProcedureProcedure GetPanelWidth(Gadget); tc.TC_ITEM\mask = #TCIF_PARAM; If SendMessage_(GadgetID(Gadget), #TCM_GETITEM, GetGadgetState(Gadget), @tc); GetClientRect_(tc\lParam, rect.RECT); ProcedureReturn rect\right; EndIfProcedureReturn GetGadgetAttribute(Gadget, #PB_Panel_ItemWidth)EndProcedureProcedure GetPanelHeight(Gadget); tc.TC_ITEM\mask = #TCIF_PARAM; If SendMessage_(GadgetID(Gadget), #TCM_GETITEM, GetGadgetState(Gadget), @tc); GetClientRect_(tc\lParam, rect.RECT); ProcedureReturn rect\bottom; EndIfProcedureReturn GetGadgetAttribute(Gadget, #PB_Panel_ItemHeight)EndProcedureProcedure SelectComboBoxText(Gadget)SendMessage_(GadgetID(Gadget), #EM_SETSEL, 0, -1)SetFocus_(GadgetID(Gadget))EndProcedureProcedure RedrawGadget(Gadget)RedrawWindow_(GadgetID(Gadget), 0, 0, #RDW_INVALIDATE)EndProcedureProcedure GetButtonBackgroundColor()ProcedureReturn GetSysColor_(#COLOR_BTNFACE)EndProcedureProcedure StartFlickerFix(Window); LockWindowUpdate() seems to be better for us than #WM_SETREDRAW: it does weird things on Windows 8 (try with 100 recent file list, the main IDE flicker when loading a new file)LockWindowUpdate_(WindowID(Window))EndProcedureProcedure StopFlickerFix(Window, DoRedraw)LockWindowUpdate_(#Null)EndProcedureProcedure StartGadgetFlickerFix(Gadget)SendMessage_(GadgetID(Gadget), #WM_SETREDRAW, #False, 0)EndProcedureProcedure StopGadgetFlickerFix(Gadget)SendMessage_(GadgetID(Gadget), #WM_SETREDRAW, #True, 0)InvalidateRect_(GadgetID(Gadget), #Null, #True)EndProcedureStructure AdditionalStreamInfo_2 ; _2 to not collide with the richedit one! (in case richedit is used)Action.i ; 0=streamin 1=streamoutBuffer.iLength.iEndStructureProcedure RichEdit_StreamCallback_2(*StreamInfo.AdditionalStreamInfo_2, *Buffer, BufferLength.l, *Result.LONG)Result = 0If *StreamInfo\Action = 0 ; stream inIf BufferLength < *StreamInfo\LengthCopyMemory(*StreamInfo\Buffer, *Buffer, BufferLength)*StreamInfo\Buffer + BufferLength*StreamInfo\Length - BufferLength*Result\l = BufferLengthElseCopyMemory(*StreamInfo\Buffer, *Buffer, *StreamInfo\Length)*Result\l = *StreamInfo\Length*StreamInfo\Length = 0EndIfElse ; stream outIf BufferLength < *StreamInfo\LengthCopyMemory(*Buffer, *StreamInfo\Buffer, BufferLength)*StreamInfo\Buffer + BufferLength*StreamInfo\Length - BufferLength*Result\l = BufferLengthElseCopyMemory(*Buffer, *StreamInfo\Buffer, *StreamInfo\Length)*Result\l = *StreamInfo\Length*StreamInfo\Length = 0EndIfEndIfProcedureReturn ResultEndProcedure#HDF_BITMAP_ON_RIGHT = 1000ドル#HDI_IMAGE = 0020ドル#HDF_SORTUP = 0400ドル ; WinXP+ with skins only, but that's enough#HDF_SORTDOWN = 0200ドルProcedure SetSortArrow_NoTheme(Gadget, Column, Direction)Static UpImage, DownImageIf UpImage = 0UpImage = CreateImage(#PB_Any, 10, 10)DownImage = CreateImage(#PB_Any, 10, 10)If StartDrawing(ImageOutput(DownImage))Box(0, 0, 10, 10, GetSysColor_(#COLOR_BTNFACE))Restore SortArrowImageFor y = 0 To 9For x = 0 To 9Read.b PixelIf PixelPlot(x, y, 000000ドル)EndIfNext xNext yStopDrawing()EndIfIf StartDrawing(ImageOutput(UpImage))Box(0, 0, 10, 10, GetSysColor_(#COLOR_BTNFACE))Restore SortArrowImageFor y = 9 To 0 Step -1For x = 0 To 9Read.b PixelIf PixelPlot(x, y, 000000ドル)EndIfNext xNext yStopDrawing()EndIfEndIfProtected item.HD_ITEM, Header, Columns, Text,ドル iHeader = SendMessage_(GadgetID(Gadget), #LVM_GETHEADER, 0, 0)If HeaderColumns = SendMessage_(Header, #HDM_GETITEMCOUNT, 0, 0)For i = 0 To Columns-1Text$ = GetGadgetItemText(Gadget, -1, i)If Column = iitem\mask = #HDI_BITMAP | #HDI_FORMAT | #HDI_TEXTitem\fmt = #HDF_BITMAP | #HDF_BITMAP_ON_RIGHT | #HDF_STRINGitem\pszText = @Text$item\cchTextMax = Len(Text$)If Direction = 1item\hbm = ImageID(UpImage)Elseitem\hbm = ImageID(DownImage)EndIfElseitem\mask = #HDI_FORMAT | #HDI_TEXTitem\fmt = #HDF_STRINGitem\pszText = @Text$item\cchTextMax = Len(Text$)item\hbm = 0EndIfSendMessage_(Header, #HDM_SETITEM, i, @item)Next iEndIfEndProcedureDataSectionSortArrowImage:Data.b 0,0,0,0,0,0,0,0,0,0Data.b 0,0,0,0,0,0,0,0,0,0Data.b 0,0,0,0,0,0,0,0,0,0Data.b 1,1,1,1,1,1,1,1,1,1Data.b 0,1,1,1,1,1,1,1,1,0Data.b 0,0,1,1,1,1,1,1,0,0Data.b 0,0,0,1,1,1,1,0,0,0Data.b 0,0,0,0,1,1,0,0,0,0Data.b 0,0,0,0,0,0,0,0,0,0Data.b 0,0,0,0,0,0,0,0,0,0EndDataSectionProcedure SetSortArrow_Theme(Gadget, Column, Direction)Header = SendMessage_(GadgetID(Gadget), #LVM_GETHEADER, 0, 0)If HeaderColumns = SendMessage_(Header, #HDM_GETITEMCOUNT, 0, 0)item.HD_ITEM\mask = #HDI_FORMATFor i = 0 To Columns-1If Column = iIf Direction = 1item\fmt = #HDF_LEFT|#HDF_STRING|#HDF_SORTUPElseitem\fmt = #HDF_LEFT|#HDF_STRING|#HDF_SORTDOWNEndIfElseitem\fmt = #HDF_LEFT|#HDF_STRINGEndIfSendMessage_(Header, #HDM_SETITEM, i, @item)Next iEndIfEndProcedureCompilerIf #PB_Compiler_Backend = #PB_Backend_CImport ""PB_Gadget_IsThemed.lEndImportCompilerEndIf; Windows only;; Column: -1 to reset; Direction: 1=ascending, -1=descending;Procedure SetSortArrow(Gadget, Column, Direction)Protected IsThemed; PB_Gadget_GetCommonControlsVersion() is called by ListIconGadget, so this is ok;CompilerIf #PB_Compiler_Backend = #PB_Backend_CIsThemed = PB_Gadget_IsThemedCompilerElseIf #PB_Compiler_Processor = #PB_Processor_x86!extrn _PB_Gadget_IsThemed!mov eax, [_PB_Gadget_IsThemed]!mov [p.v_IsThemed], eaxCompilerElse!extrn PB_Gadget_IsThemed!mov rax, qword 0!mov eax, dword [PB_Gadget_IsThemed]!mov [p.v_IsThemed], raxCompilerEndIfIf IsThemedSetSortArrow_Theme(Gadget, Column, Direction)ElseSetSortArrow_NoTheme(Gadget, Column, Direction)EndIfEndProcedureProcedure ZeroMemory(*Buffer, Size)RtlZeroMemory_(*Buffer, Size)EndProcedureProcedure.s GetExplorerName()ProcedureReturn "Explorer"EndProcedureProcedure ShowExplorerDirectory(Directory$)ShellExecute_(#Null, @"explore", @Directory,ドル #Null, #Null, #SW_SHOWNORMAL)EndProcedureProcedure ShowExplorerFile(File$)RunProgram("explorer.exe", "/SELECT," + #DQUOTE$ + File$ + #DQUOTE,ドル "")EndProcedureProcedure ModifierKeyPressed(Key)Select KeyCase #PB_Shortcut_Shift: vKey = #VK_SHIFTCase #PB_Shortcut_Control: vKey = #VK_CONTROLCase #PB_Shortcut_Alt: vKey = #VK_MENUEndSelectIf GetAsyncKeyState_(vKey) & 8000ドルProcedureReturn #TrueElseProcedureReturn #FalseEndIfEndProcedureProcedure OpenWebBrowser(Url$)ShellExecute_(#Null, @"open", @Url,ドル @"", @"", #SW_SHOWNORMAL)EndProcedureProcedure GetListViewScroll(Gadget)ProcedureReturn SendMessage_(GadgetID(Gadget), #LB_GETTOPINDEX, 0, 0)EndProcedureProcedure SetListViewScroll(Gadget, Position)SendMessage_(GadgetID(Gadget), #LB_SETTOPINDEX, Position, 0)EndProcedureCompilerEndIf
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。