drWinFBE_Tools

Windows specific questions.
UEZ
Posts: 972
Joined: May 05, 2017 19:59
Location: Germany

Re: drWinFBE_Tools

Post by UEZ »

deltarho[1859] wrote:@UEZ

Ah, I am with you now.

The cPaths window, on Windows 10, is not wide enough to accommodate a title and a minimize button and so on.

I have two monitors - I could be coding on one monitor and checking out an API at MSDN on another.

Anyway, why don't you just close cPaths? You can always open it again - there is no information to lose and it opens quickly.

I could add a function to toggle between topmost and not topmost - would that be any good?

Why do you have cPaths positioned so high? It gets in the way of the Find window.
Well, as I said, the best option would be to have it integrated into WinFBE. If not then the minimize icon in the windows title would be enough to minimize the window when not needed as the fastest solution. Optional a toggle option for topmost attribute would be nice, too.
The position of Cpaths was just to take a screenshot.
Maybe you can set the Cpaths window as a child of WinFBE GUI if it makes sense...
deltarho[1859]
Posts: 4292
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: drWinFBE_Tools

Post by deltarho[1859] »

Richt click on cPaths' title bar - there is a 'minimise' there - I had forgotten that.
deltarho[1859]
Posts: 4292
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: drWinFBE_Tools

Post by deltarho[1859] »

@UEZ

I wasn't going to do this but changed my mind.

@PaulSquires

How does this look on your 4K monitor? I am a bit concerned about the toggle bitmap.

The following actually unzips to SetCompilerPathsII.exe. Make a copy of your existing exe.

Vertical 'pin' => TopMost, Horizontal 'pin' => Not TopMost.

ToggleSCPII
UEZ
Posts: 972
Joined: May 05, 2017 19:59
Location: Germany

Re: drWinFBE_Tools

Post by UEZ »

@Δρ: Thanks for you update.

What about the idea to create the GUI as a child GUI in WinFBE? The GUI will stay on top of WinFBE GUI and will minimize automatically when WinFBE minimizes.

Example:

Code: Select all

'Coded by UEZ
#Include "windows.bi"
#include "win\tlhelp32.bi"
#Include "win\commctrl.bi"

Declare Function WndProc(hWnd As HWND,uMsg As UINT,wParam As WPARAM,lParam As LPARAM) As Integer

Function _WinAPI_GetParentProcess() As Integer
	Dim As DWORD pid = GetCurrentProcessId(), pid_parent = 0
	Dim As HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
	Dim As PROCESSENTRY32 tPROCESSENTRY32
	tPROCESSENTRY32.dwSize = Sizeof(tPROCESSENTRY32)
	Process32First(hSnapshot, @tPROCESSENTRY32)
	While TRUE
		If tPROCESSENTRY32.th32ProcessID = pid Then
			pid_parent = tPROCESSENTRY32.th32ParentProcessID
			Exit While
		End If
		Process32Next(hSnapshot, @tPROCESSENTRY32)
	Wend
	CloseHandle(hSnapshot)
	Return pid_parent
End Function

Sub _WinAPI_GetProcessThreads(pid As DWORD, aThreads() As Integer)
	Dim As HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
	Dim As THREADENTRY32 tTHREADENTRY32
	tTHREADENTRY32.dwSize = Sizeof(tTHREADENTRY32)
	Thread32First(hSnapshot,  @tTHREADENTRY32)
	Dim As Ushort i = 1
	While TRUE
		If pid = tTHREADENTRY32.th32OwnerProcessID Then
			aThreads(i) = tTHREADENTRY32.th32ThreadID
			i += 1
		End If
		If Thread32Next(hSnapshot, @tTHREADENTRY32) = 0 Then Exit While
	Wend
	CloseHandle(hSnapshot)
	aThreads(0) = i - 1
End Sub

Function __WinAPI_EnumWindowsCallback(hWnd As HWND, lParam As LPARAM) As BOOL
	Dim as ZString * 4096 buffer
	GetClassName(hWnd, @buffer, 4096)
	If IsWindowVisible(hWnd) And buffer = "WinFBE_Class" Then
		Dim As Integer Ptr h = Cast(Integer Ptr, lParam)
		h[0] = Cast(Integer, hWnd)
	End If
	Return TRUE
End Function

Function _WinAPI_GetParentHWND(pid As DWORD) As HWND
	Dim As Integer aThreads(1000)
	_WinAPI_GetProcessThreads(pid, aThreads())
	Dim As HWND hWnd_Parent = 0
	For i As Ushort = 1 To aThreads(0)
		EnumThreadWindows(aThreads(i), Cast(WNDENUMPROC, @__WinAPI_EnumWindowsCallback), Cast(LPARAM, @hWnd_Parent))
	Next	
	Return hWnd_Parent	
End Function

'Function _WinAPI_IsProcessRunning(pid As DWORD) As BOOL
'	Dim As HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid)
'    Dim As DWORD ret = WaitForSingleObject(process, 0)
'    CloseHandle(process)
'    Return ret = WAIT_TIMEOUT
'End Function

Function _WinAPI_IsProcessRunning(pid As DWORD) As BOOL
	Dim As Bool bExists = False
	Dim As PROCESSENTRY32 tPROCESSENTRY32
	tPROCESSENTRY32.dwSize = Sizeof(tPROCESSENTRY32)
	Dim As HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
	Process32First(hSnapshot, @tPROCESSENTRY32)
	While Process32Next(hSnapshot, @tPROCESSENTRY32)
		If tPROCESSENTRY32.th32ProcessID = pid Then
			bExists = True
			Exit While
		End If
	Wend
	CloseHandle(hSnapshot)
	Return bExists
End Function

Dim wc As WNDCLASSEX
Dim msg As MSG
Dim hHWND As HWND

Dim As String sTitle = "Cpath"
Dim Shared As ULong iW, iH
iW = 250
iH = 100

Dim Shared As DWORD parent_pid 
parent_pid = _WinAPI_GetParentProcess()
Dim As HWND hParentHWND
hParentHWND = _WinAPI_GetParentHWND(parent_pid)
If hParentHWND = 0 Then End 0

With wc
	.style         = CS_HREDRAW Or CS_VREDRAW
	.lpfnWndProc   = @WndProc
	.cbClsExtra    = NULL
	.cbWndExtra    = NULL
	.hInstance     = GetModuleHandle(NULL)
	.hIcon         = LoadIcon(NULL, IDI_APPLICATION)
	.hCursor       = LoadCursor(NULL, IDC_ARROW)
	.hbrBackground = GetStockObject(WHITE_BRUSH)
	.lpszMenuName  = Null
	.lpszClassName = StrPtr("FB GUI")
	.cbSize		   = SizeOf(WNDCLASSEX)
End With
 
RegisterClassEx(@wc)

Dim As RECT tPos
GetWindowRect(hParentHWND, @tPos)


hHWND = CreateWindowEx(WS_EX_TOOLWINDOW Or WS_EX_COMPOSITED, wc.lpszClassName, sTitle, _
							  WS_OVERLAPPEDWINDOW Or WS_VISIBLE , _
							  tPos.right - iW - 100, tPos.top + 50, _
							  iW, iH, _
							  hParentHWND, NULL, wc.hInstance, NULL)

While GetMessage(@msg, 0, 0, 0)
	TranslateMessage(@msg)
	DispatchMessage(@msg)
Wend


Function WndProc(hWnd As HWND,uMsg As UINT,wParam As WPARAM,lParam As LPARAM) As Integer
	Select Case uMsg
		Case WM_CLOSE
			PostQuitMessage(0)
		Case WM_CREATE
		  SetTimer(hWnd, 1, 250, null )
		Case WM_TIMER
		  If _WinAPI_IsProcessRunning(parent_pid) = 0 Then ' WinFBE is not running
			KillTimer(hWnd, 1)
			SendMessage(hWnd, WM_CLOSE, 0, 0)
		  End If
		Case Else
			Return DefWindowProc(hWnd, uMsg, wParam, lParam)
	End Select
End Function
It looks like this here:
Image

I added the compiled test code as a tool within WinFBE and it starts when WinFBE runs.
Last edited by UEZ on May 18, 2020 20:04, edited 1 time in total.
deltarho[1859]
Posts: 4292
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: drWinFBE_Tools

Post by deltarho[1859] »

@UEZ

When you first mentioned that approach I thought that you meant for WinFBE to provide a child window which would be for Paul to do. I didn't realize you meant a child window injection.

That looks promising.

Finish it using a cpath.ini. Image
UEZ
Posts: 972
Joined: May 05, 2017 19:59
Location: Germany

Re: drWinFBE_Tools

Post by UEZ »

deltarho[1859] wrote:@UEZ

When you first mentioned that approach I thought that you meant for WinFBE to provide a child window which would be for Paul to do. I didn't realize you meant a child window injection.

That looks promising.

Finish it using a cpath.ini. Image
Well, my first idea was that Paul integrates your idea, which is great, to WinFBE directly by adding a 2nd combobox. My idea is only a workaround.

Maybe there is a way to hook to ToolbarWindow32 control from WinFBE and inject a second combobox from outside...

Btw, my exit code doesn't work properly. When WinFBE closes then the additional GUI should exit, too but it works sometimes only. How did you do the check to close Cpath when WinFBE closes?
deltarho[1859]
Posts: 4292
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: drWinFBE_Tools

Post by deltarho[1859] »

UEZ wrote:How did you do the check to close Cpath when WinFBE closes?
Nothing clever - it is blinding simple. Using a timer was my idea and FindWindow was by José - my approach was a bit of a 'dog's dinner'.

Code: Select all

Case WM_CREATE
  SetTimer( hDlg, IDC_Timer, 250, null )
 
Case WM_TIMER
  If FindWindowW("WinFBE_Class", NULL) = NULL THEN ' WinFBE is not running
    KillTimer hDlg, IDC_Timer
    SendMessage(hDlg, WM_CLOSE, 0, 0)
    Exit Function
  End If
Pooling every 250ms gives a closure between almost immediately and 250ms with a statistical expectation of 125ms. My last update uses 100ms with a statistical expectation of 50ms - I was not aware of a faster pooling.
UEZ
Posts: 972
Joined: May 05, 2017 19:59
Location: Germany

Re: drWinFBE_Tools

Post by UEZ »

deltarho[1859] wrote:
UEZ wrote:How did you do the check to close Cpath when WinFBE closes?
Nothing clever - it is blinding simple. Using a timer was my idea and FindWindow was by José - my approach was a bit of a 'dog's dinner'.

Code: Select all

Case WM_CREATE
  SetTimer( hDlg, IDC_Timer, 250, null )
 
Case WM_TIMER
  If FindWindowW("WinFBE_Class", NULL) = NULL THEN ' WinFBE is not running
    KillTimer hDlg, IDC_Timer
    SendMessage(hDlg, WM_CLOSE, 0, 0)
    Exit Function
  End If
Pooling every 250ms gives a closure between almost immediately and 250ms with a statistical expectation of 125ms. My last update uses 100ms with a statistical expectation of 50ms - I was not aware of a faster pooling.
Thanks. I thought too simple... ^^
deltarho[1859]
Posts: 4292
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: drWinFBE_Tools

Post by deltarho[1859] »

@UEZ

I agree with your idea of adding a 2nd combobox by Paul. However, he is currently concerned with fixing editor issues and further developing the designer. He may well take my view that few want more than one tool chain and Paul Doe, perhaps others, have problems with any later than gcc 5.2 - although I don't.

I thought that I was 'over the top' with my collection of tool chains but I see that you have gcc 10 and 11. I am sure that some members think us 'barking mad' but I think they are missing out - 8.3 is a 'cracker'. 8.3 and 9.2 are at Paul's GitHub pages but have not been mentioned since WinFBE V 1.9.4, and he is no rush to push them again.

A combobox with user switches would also be good. I would like to see both my SetCompiler* made redundant - maybe one day.
PaulSquires
Posts: 999
Joined: Jul 14, 2005 23:41

Re: drWinFBE_Tools

Post by PaulSquires »

deltarho[1859] wrote: @PaulSquires
How does this look on your 4K monitor? I am a bit concerned about the toggle bitmap.
@deltarho[1859]
I have attached a screen shot. As you can see, the bitmap does not scale well and the background is not transparent. You might want to take Jose's advice and use his CXpButton class button with a transparent PNG image.

https://www.planetsquires.com/cpaths.jpg
deltarho[1859]
Posts: 4292
Joined: Jan 02, 2017 0:34
Location: UK
Contact:

Re: drWinFBE_Tools

Post by deltarho[1859] »

Paul wrote:, the bitmap does not scale well and the background is not transparent.
I figured as much.

It is probably a good idea to get into CXpButton in any event but not for the sake of a single button especially since I did not really buy into it's need. If another application opened on top of WinFBE and my SetCompiler* got in the way I would simply close them - it is the fastest remedy.

So, an interesting exercise but I shall not be pursuing the TopMost toggle any further. You may like to to put it into a bucket of water - it was designed to self-destruct in 24 hours - it needed further work as I had not looked at the larger forms via the 'L' filename appending. Image
UEZ
Posts: 972
Joined: May 05, 2017 19:59
Location: Germany

Re: drWinFBE_Tools

Post by UEZ »

I was able to inject a combobox to the ToolbarWindow32 control. :-)

Image

Here the code I used so far:

Code: Select all

'Coded by UEZ
#Include "windows.bi"
#include "win\tlhelp32.bi"
#Include "win\commctrl.bi"
#Include "win\windowsx.bi"

Dim Shared As HWND hToolbar = 0, hCombobox, hParentHWND
Dim Shared As Integer iCtrlID
Const idTimer = -1

Declare Function WndProc(hWnd As HWND,uMsg As UINT,wParam As WPARAM,lParam As LPARAM) As Integer

Function _WinAPI_GetParentProcess() As Integer
	Dim As DWORD pid = GetCurrentProcessId(), pid_parent = 0
	Dim As HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
	Dim As PROCESSENTRY32 tPROCESSENTRY32
	tPROCESSENTRY32.dwSize = Sizeof(tPROCESSENTRY32)
	Process32First(hSnapshot, @tPROCESSENTRY32)
	While TRUE
		If tPROCESSENTRY32.th32ProcessID = pid Then
			pid_parent = tPROCESSENTRY32.th32ParentProcessID
			Exit While
		End If
		Process32Next(hSnapshot, @tPROCESSENTRY32)
	Wend
	CloseHandle(hSnapshot)
	Return pid_parent
End Function

Sub _WinAPI_GetProcessThreads(pid As DWORD, aThreads() As Integer)
	Dim As HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
	Dim As THREADENTRY32 tTHREADENTRY32
	tTHREADENTRY32.dwSize = Sizeof(tTHREADENTRY32)
	Thread32First(hSnapshot,  @tTHREADENTRY32)
	Dim As Ushort i = 0
	While TRUE
		If pid = tTHREADENTRY32.th32OwnerProcessID Then
			aThreads(i) = tTHREADENTRY32.th32ThreadID
			i += 1
		End If
		If Thread32Next(hSnapshot, @tTHREADENTRY32) = 0 Then Exit While
	Wend
	CloseHandle(hSnapshot)
	Redim Preserve aThreads(i - 1)
End Sub

Function __WinAPI_EnumWindowsCallback(hWnd As HWND, lParam As LPARAM) As BOOL
	Dim as ZString * 4096 buffer
	GetClassName(hWnd, @buffer, 4096)
	If IsWindowVisible(hWnd) Then 'And buffer = "WinFBE_Class" Then
		Dim As Integer Ptr h = Cast(Integer Ptr, lParam)
		h[0] = Cast(Integer, hWnd)
	End If
	Return TRUE
End Function

Function _WinAPI_GetParentHWND(pid As DWORD) As HWND
	Dim As Integer aThreads()
	Redim aThreads(1000)
	_WinAPI_GetProcessThreads(pid, aThreads())
	Dim As HWND hWnd_Parent = 0
	For i As Ushort = 0 To Ubound(aThreads)
		EnumThreadWindows(aThreads(i), Cast(WNDENUMPROC, @__WinAPI_EnumWindowsCallback), Cast(LPARAM, @hWnd_Parent))
	Next	
	Return hWnd_Parent	
End Function

'Function _WinAPI_ProcessExists(pid As DWORD) As BOOL
'	Dim As HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid)
'    Dim As DWORD ret = WaitForSingleObject(process, 0)
'    CloseHandle(process)
'    Return ret = WAIT_TIMEOUT
'End Function

Function _WinAPI_ProcessExists(pid As DWORD) As BOOL
	Dim As Bool bExists = False
	Dim As PROCESSENTRY32 tPROCESSENTRY32
	tPROCESSENTRY32.dwSize = Sizeof(tPROCESSENTRY32)
	Dim As HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
	Process32First(hSnapshot, @tPROCESSENTRY32)
	While Process32Next(hSnapshot, @tPROCESSENTRY32)
		If tPROCESSENTRY32.th32ProcessID = pid Then
			bExists = True
			Exit While
		End If
	Wend
	CloseHandle(hSnapshot)
	Return bExists
End Function


Function __WinAPI_EnumChildProcCallback(hWnd As HWND, lParam As LPARAM) As BOOL
	Dim As ZString * 4096 StrBuffer
	If lParam Then
		GetClassName(hWnd, @StrBuffer, 4096)		
		If StrBuffer = "ToolbarWindow32" Then 
			iCtrlID = GetDlgCtrlID(hWnd)
			hToolbar = hWnd
			'? "Class name: " & StrBuffer, "id: " & iCtrlID
		End If
		Return True
	Else
		GetWindowText(hWnd, @StrBuffer, 4096)
		'? "Window text: " & StrBuffer
		EnumChildWindows(hWnd, Cast(WNDENUMPROC, @__WinAPI_EnumChildProcCallback), 1)
	End If
	
End Function

Sub _WinAPI_EnumChildWindws(hWndParent As HWND)
	EnumChildWindows(hWndParent, Cast(WNDENUMPROC, @__WinAPI_EnumChildProcCallback), 0)
End Sub


Dim wc As WNDCLASSEX
Dim msg As MSG
Dim hHWND As HWND

Dim As String sTitle = "Cpath"
Dim Shared As ULong iW, iH
iW = 250
iH = 100

Dim Shared As DWORD parent_pid 
parent_pid = _WinAPI_GetParentProcess()

hParentHWND = _WinAPI_GetParentHWND(parent_pid)
_WinAPI_EnumChildWindws(hParentHWND)

If hParentHWND = 0 Or hToolbar = 0 Then End 0

_WinAPI_EnumChildWindws(hParentHWND)

With wc
	.style         = CS_HREDRAW Or CS_VREDRAW
	.lpfnWndProc   = @WndProc
	.cbClsExtra    = NULL
	.cbWndExtra    = NULL
	.hInstance     = GetModuleHandle(NULL)
	.hIcon         = LoadIcon(NULL, IDI_APPLICATION)
	.hCursor       = LoadCursor(NULL, IDC_ARROW)
	.hbrBackground = GetStockObject(WHITE_BRUSH)
	.lpszMenuName  = Null
	.lpszClassName = StrPtr("FB GUI")
	.cbSize		   = SizeOf(WNDCLASSEX)
End With
 
RegisterClassEx(@wc)

Dim As RECT tPos
GetWindowRect(hParentHWND, @tPos)
Dim As Integer ComboBoxId = 2000

hHWND = CreateWindowEx(WS_EX_TOOLWINDOW, wc.lpszClassName, sTitle, _
							  WS_OVERLAPPEDWINDOW Or WS_VISIBLE , _
							  tPos.right - iW - 100, tPos.top - 50, _
							  iW, iH, _
							  hParentHWND, Cast(HMENU, Cast(LONG_PTR, ComboBoxId)), wc.hInstance, NULL)
ShowWindow(hHWND, SW_SHOW)

hCombobox = CreateWindowEx(0, WC_COMBOBOX, NULL, _
					 WS_VISIBLE Or  WS_CHILD Or  WS_TABSTOP Or  WS_VSCROLL Or WS_CLIPCHILDREN Or  WS_CLIPSIBLINGS Or  CBS_AUTOHSCROLL Or CBS_DROPDOWN, _
					 1020, 8, 250, 24, hToolbar, Cast(HMENU, Cast(LONG_PTR, ComboBoxId)), GetModuleHandle(NULL), NULL)

ComboBox_AddString(hCombobox, StrPtr("FreeBASIC-1.08.0-gcc-10.0"))
ComboBox_AddString(hCombobox, StrPtr("FreeBASIC-1.08.0-gcc-11.0"))
SendMessage(hCombobox, CB_SETCURSEL, Cast(WPARAM, 0), 0)

While GetMessage(@msg, 0, 0, 0)
	TranslateMessage(@msg)
	DispatchMessage(@msg)
Wend


Function WndProc(hWnd As HWND,uMsg As UINT,wParam As WPARAM,lParam As LPARAM) As Integer
	Select Case uMsg
		Case WM_CLOSE, WM_DESTROY
			PostQuitMessage(0)
			Return 0
		Case WM_CREATE
			SetTimer(hWnd, 1, 250, Null)
		Case WM_TIMER
			If IsWindow(hParentHWND) = 0 Then ' WinFBE is not running
				KillTimer(hWnd, 1)
				SendMessage(hWnd, WM_CLOSE, 0, 0)
				DestroyWindow(hWnd)
			End If
		Case WM_ERASEBKGND
			RedrawWindow(hCombobox, NULL, NULL, RDW_UPDATENOW)
			Return DefWindowProc(hWnd, uMsg, wParam, lParam)
		Case WM_PAINT
			RedrawWindow(hCombobox, NULL, NULL, RDW_UPDATENOW)
			Return 0
		Case Else
			Return DefWindowProc(hWnd, uMsg, wParam, lParam)
	End Select
End Function
The exit code still doesn't work properly...
PaulSquires
Posts: 999
Joined: Jul 14, 2005 23:41

Re: drWinFBE_Tools

Post by PaulSquires »

My quick initial thoughts on this (multiple toolchains).... As was surmised in an earlier post, I don't know how much interest there is for such a thing. I imagine that most people want to simply use FB out of the box as per the official releases. Of course, that's just my initial thoughts and I could be totally wrong. If the ability to easily add additional toolchains existed, then maybe such sentiment to use alternate toolchains would quickly change. Maybe a chicken/egg type of problem.

I have looked at this topic before and, for me, it comes down to how to best incorporate this functionality into the editor without it being too overwhelming for the user - especially a new user.

My thoughts on how to incorporate into the editor gui:

Have the current toolchain display in a panel in the bottom statusbar. Probably in the panel to the right of the file encoding panel. If the user clicks on that panel, then a popup menu will display showing all of the available toolchains (with a checkmark next to the currently selected one) along with an option to "add/edit toolchains" or maybe simply "configure toolchains". This way you could quickly toggle amongst toolchains and then only display a popup configuration dialog should that option be selected (with the benefit of hiding away all the clutter of the add, edit, delete of toolchains until it is specifically needed). The toolchain configuration dialog would also be accessible under the "Options" menu, immediately below the "Build Configurations..." menu option. I am not a fan of an additional combobox on the toolbar. The toolbar is already too wide and users with smaller monitors and displays would not benefit. Likewise, I am not a fan of an additional toolbar within the rebar, hence the reason I am talking about a statusbar panel approach.

What are your thoughts on this type of approach?
UEZ
Posts: 972
Joined: May 05, 2017 19:59
Location: Germany

Re: drWinFBE_Tools

Post by UEZ »

For me it makes sense to have a fast access to different toolchains to make some test regarding speed and I like the idea to have this feature integrated into WinFBE. It's a pain in the a$$ to hook to WinFBE to add a combobox or whatever. I stumble from one problem to the next. :-(
PaulSquires wrote:My thoughts on how to incorporate into the editor gui:
If you can add this and we will see. :-) The combobox was just an option not a must have because it doesn't take too much space and it's easy to access without having a clicking orgy thru menus. As a separate child window of WinFBE can also be ok because when I minimize WinFBE it will minimize, too as it is now but without being a child window. That can be done also from external tool as I've posted above.

Off topic: if you can add a highlighter of current word thru the whole code to see where the word is used (maybe I've asked it already). ^^
PaulSquires
Posts: 999
Joined: Jul 14, 2005 23:41

Re: drWinFBE_Tools

Post by PaulSquires »

UEZ wrote: Off topic: if you can add a highlighter of current word thru the whole code to see where the word is used (maybe I've asked it already). ^^
No problem. I have now added this feature. It is a feature that is present in editors like Visual Studio Code. As you move from word to word in the editor, matching words in the editor are highlighted. I believe that editor calls it "Occurrences Highlighting" so that is the terminology I used for the new feature.
Post Reply