Jump to content

vhanla

Members
  • Content Count

    29
  • Joined

  • Last visited

Community Reputation

1 Neutral

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I tried modifying installation to add features I opted out in previous installation, but installer shows -1 bytes If I mark a new feature to add, it counts negatively Why is that? I have free space almost 100GB. Something is wrong here.
  2. Thanks, actually changing GWL_EXSTYLE with SetWindowLong is for hiding it from Alt Tab list. Tried that too, it still shows the taskbar button for a very little amount of time, then it disappears. Unlike VCL applications, FMX applications somehow still tries to show its taskbar icon. `ApplicationHWND` itself without even creating form neither running it, shows its taskbar icon. e.g. in projects file (dpr) I uncomment Application.CreateForm... and Application.Run; but add var Handle := ApplicationHWND; after Application.Initialize; the taskbar icon is created and obviously hidden since application terminates after that. When that incompleted FMX application is launched, current foreground application (e.g. explorer) is lost and focuses on a non visible application (our app) just to return to the original foreground window (since it terminates), weird thing is taskbar still shows its icon "flashing" to fastly disappear. Another interesting thing is, that creating a FMX application (in this case 2D mutidevice application) it always creates a Unit2 /TForm2 as main initial form even though there is no Unit1, at least here on my Delphi 10.3 Update 3 Rio installation. So debuggin it with IDA shows a call to FMX::Platform::Win::TPlatformWin::CreateAppHandle which indeed calls Winapi.Windows.ShowWindow just by calling ApplicationHWND function. Notice the icon in the taskbar, it belongs to that FMX application. Anyhow, I tried using the non ApplicationHWND method, which is the one finding the current process id window to hide, which also works. Calling HideAppInTaskbar(Form Handle) from FormCreate shows that before even processing that call, its icon is already added to explorer's taskbar. This procedure does what is expected, to hide the taskbar's icon, but it doesn't avoid its creation in the first place, so it is always visible after launching, at least for a very short period of time. That's because after Application.Run, FMX.Platform.Win.TPlatformWin.Run procedure calls Fmx.Forms.TApplication.RealCreateForms, which also calls Fmx.Forms.TApplication.CreateForm -> Fmx.Forms.TCommonCustomForm.Create -> public Fmx.Forms.TCommonCustomForm.InitializeNewForm -> Fmx.Forms.TCommonCustomForm.CreateHandle which as similar as ApplicationHWND it is called from Fmx::Platform::Win::TPlatformWin::CreateWindow GetApplicationHWND -> Fmx.Platform.Win.TPlatformWin.UpdateApplicationHwnd ends up calling Fmx.Platform.Win.TPlatformWin.CreateAppHandle Which indeed calls ShowWindow with nCmdShow parameter using argument 1 (SW_SHOWNORMAL), then it follows other calls to finally end up with FormCreate procedure in our main form, so those suggested tricks to hide the taskbar icon are finally applied, after it was shown in the first place. However, since every application is a binary, it can be patched, so I tried patching it in the binary to 0 (SW_HIDE) and it worked, no more issues. push 1 in hex 6a 01 (BA 01 00 00 00 in x64), just replaced with 64 00 in the binary/executable using a hex editor, and voilà it finally worked as I was requiring. No more tiny little amount of time showing the taskbar icon just to hide it afterwards. Notice that it might differ in your project, but mine was located at this hex pattern location in my binary/executable (which was not found more than once). ff 8b d8 6a 01 53 e8 so I just look for it and patch after each build. Only 32 bit builds. 48 89 4d 70 ba 01 00 00 00 e8 in x64 builds (debug&release mode). At least with Delphi Rio 10.3.3 Finally, the culprit seems to be function TPlatformWin.CreateAppHandle: HWND in FMX.Platform.Win.pas file, which calls Winapi.Windows.ShowWindow(Result, SW_SHOWNORMAL) instead of SW_HIDE). However it was called from TPlatformWin.CreateWindow function when ParentWnd = 0, which means no parents are found. Then it follows ParentWnd := ApplicationHWND; <--- this function, as mentioned before, leads to create and show a non visible window, just to get the application handle, the procedure in question is TPlatformWin.UpdateApplicationHwnd when there is no parent handle. But modifying those delphi source code files don't work, so I ended patching it after the binary is created. [Update] Thanks to this answer at SO https://stackoverflow.com/a/10471855/537347 the solution was just a matter to copy the FMX.Platform.Win.pas file to your project's directory and make the changes to CreateAppHandle function: function TPlatformWin.CreateAppHandle: HWND; var ... begin ... Result := CreateWindowEx(WS_EX_WINDOWEDGE or WS_EX_APPWINDOW, FMAppClass.lpszClassName, PChar(FTitle), WS_POPUP or WS_GROUP, 0, 0, 0, 0, GetDesktopWindow, 0, hInstance, nil); if FApplicationHWND = 0 then // this is checked by ApplicationHWND function Winapi.Windows.ShowWindow(Result, SW_HIDE) // make sure our application never shows in taskbar icon in this case else Winapi.Windows.ShowWindow(Result, SW_SHOWNORMAL); end; Originally, there is no conditional and uses the SW_SHOWNORMAL argument only, this fixes that. Now, I'm not worried about patching the created binary/exe anymore. Just remember to remove it from public repositories as it is a copyrighted material. However, I left the patching method incase your Delphi license/edition doesn't include FMX source code.
  3. Hello, I was trying to use `Application.MainFormOnTaskbar := False` in a FMX application, but it doesn't exits there. So after looking for answers, I found this one: uses ... FMX.Platform.Win, Winapi.Windows,... begin Application.Initialize; ShowWindow(ApplicationHWND, SW_HIDE); ... This kind of works, but it is not as "silent"ish as the VCL counterpart, because it still shows a blank button being added to the taskbar then disappears before completely showing its icon. This is more noticeable when FMX application it not pinned. It shows it in small amount of time, before hiding it but is noticeable. Is there any way to completely hide it on launch? I'm writing a tool to center the taskbar's icons, and also another one to pin icons and launch from its position (pinned .lnk with different arguments are allowed more than once) like mac's stacks but with fancy FMX effects and animations, but launching them (being it a FMX application and as stated before it has that taskbar issue) is noticeable since my other tool rearranges its position and it looks weird, but normal VCL application doesn't do that. I also tried mixing VCL with FMX as MonkeyMixer method suggests, with main application VCL which is hidden and launches the FMX form, yet it still has the same issue, it shows an incomplete icon in the taskbar to fastly disappear, and since my other tool center icons, it is expected that it rearranges taskbar's icons giving an effect like shaking, which is very annoying. In this gif animation I show what I mean. The FMX version is the last icon, when it is launched the taskbar's icons restart due to that mentioned issue (might fix in the centering application, but without injecting code is hard, though is planned for distant future, I don't want to deal with explorer.exe unexpected crashes yet), while the other launches from pinned icons is a VCL application, and as you can see it doesn't try to create a taskbar button, just remains hidden from the beginning. Notice that I don't want those applications to be visible because (otherwise) taskbar's thumbnail will interfere in "usability", and that is not wanted. However, I might fix the centering application with delaying and etc ways, but the original question is regarding to hide it completely from taskbar on launch, and to keep it running in background is an option, but I still want it to solve that issue as is (required).
  4. vhanla

    Using the New Edge browser control

    None of them worked, I also tried recommended version from http://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_TEdgeBrowser_Component_and_Changes_to_the_TWebBrowser_Component 0.9.430 which fails with access error, newer versions don't show any error messages, just creates a directory called appname.exe.WebView2 which is empty unlike previous one, which fills with a bunch of files and directories but fails. I installed and copied files from fixed cab too (from https://developer.microsoft.com/en-us/microsoft-edge/webview2/ to include EmbeddedBrowserWebView.dll I have Edge canary and stable installed, both 64 bits. MyApps compiled and tried x86 and x64. dlls respectively, none of them works. --- IMHO, new fixed approach (from that installer page) seems just like CEF embedded, almost like shipping your own web browser, wasting more RAM unless you take full advantage of web technologies, I'd prefer old EdgeHTML approach (aka. WebView1.0 for Win32) it works nicely for simple tasks. https://stackoverflow.com/a/52788855/537347 I wish they'd give more freedom like CEF4Delphi, specially when using system notifications (from webpage), which is still attached to its runtime executables, also audio sessions. Both versions are like that, WebView for Win32 v1.0 and newer v2. https://github.com/MicrosoftEdge/WebView2Feedback/issues/4 CEF4Delphi as far as I remember allows to identify web notifications from your application. While Edge's embedded gives Win32WebViewHost (for previous version), and for this new one, it shows a description for desktop notification from web viewer (in your locale) which doesn't give any way to notify users which application's the notification came from, i.e. all programs using WebView2 will notifiy (web notifications) with the same application identifier (hardcoded by Microsoft).
  5. vhanla

    borderless with aero shadow

    type TForm1 = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); private { Private declarations } procedure WMNCCalcSize(var Msg: TWMNCCalcSize); message WM_NCCALCSIZE; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin // to hide white 1px line in top DoubleBuffered := True; Panel1.Align := alClient; Panel1.BevelOuter := TBevelCut.bvNone; Panel1.Caption := ''; // enable DWMApi Shadow GlassFrame.Top := 1; GlassFrame.Enabled := True; end; procedure TForm1.WMNCCalcSize(var Msg: TWMNCCalcSize); begin // to hide caption bar Msg.Msg := WM_NULL; inherited; end; I was playing with this in Windows 10/Rio. I don't know if on other versions requires more adjustments (I guess so), but this was short code to achieve that. And it keeps system context menu, aero snap response too. I tried painting canvas to remove the 1 pixel white line at the top, no success, but `doublebuffered` set to true along a component occupying that part was enough.
  6. Thank you. Is there any way to know why the IDE crashed and closed itself without any warning? A log file or something? It just keeps closing itself for no reason, I start the IDE and after a while it hungs and closes right away, no warnings, nothing, it just closes randomly, no special steps.
  7. I just uninstalled Delphi 10.4 (trial ended) and reinstalled Delphi 10.3.3 CE, (had to activate again 2/3 because I reinstalled Windows 10 on the same machine "sigh SSD died" I lost the downloaded slip). Anyway, after reinstalling, windows registry were not updated TO 20.0 FROM 21.0 for each delphi files, I had to mannually update each registry in HKEY_CLASSES_ROOT, because opening those files from File Explorer tried to use 10.4 executable, file associations were kept from latest version. I had to pick BDS for each filetype from File Explorer (double click). At the end I'm reinstalling Delphi 10.3.3 once more, now this uninstaller (InstallAware) seems to delete registry entries for file associations, I'm doing it in case other registry entries not related to file associations are still trying to use 10.4's sadly, this old Installer/Uninstaller is slower than newer. Reinstalled and an error message shows on first launch. Definitely I'm having lot of issues with Delphi, I'm sad. I'm starting to believe that I have to switch to another programming language, which I don't want. OMG, second reinstall, file associations and launching them still not working. Maybe I should reinstall Windows 10 (2004 BTW). As usual, I'm backuping registry entries to reapply incase the license manager fails on IDE crash, which usually happens to me, restoring from registry entries saved me a lot of times, and migration tool was useless in that case, which forced me to reinstall (the nth times) I ended up with these icons using Open always with option, I can't differentiate them, maybe I will try to find out which icon index to update to on registry. Thanks for reading.
  8. vhanla

    Your RAD Studio 10.4 Sydney issues

    Classic Undocked layout is buggy, sometimes it causes to restart the IDE without any prompt, and LSP is slower to popup than previous version, maybe is just my installation.
  9. I'm trying 10.4 (trial), and I can't find out why this error keeps occurring, I'm starting to suspect JCL or JVCL has something to do, since the last time my previous installations that didn't show this error at all these components were not installed (not really sure though). However, today Delphi IDE 10.4 also had this error, and even though I reapplied the trial key and import saved files which I did using migration tool (just after installing 10.4) didn't help at all. I had to reinstall, again.
  10. vhanla

    Your RAD Studio 10.4 Sydney issues

    Just installed it, and created a new VCL application project. Launched the debug (F9) and after closing the VCL application, it throws error Complete Error log is: [206C0D7B]{coreide270.bpl} Desktop.TDesktopStates.RestoreDesktop (Line 1713, "Desktop.pas" + 8) + $14 [206C1938]{coreide270.bpl} Desktop.TDesktopState.SaveRuntimeInfo (Line 1935, "Desktop.pas" + 0) + $C [206C0D62]{coreide270.bpl} Desktop.TDesktopStates.RestoreDesktop (Line 1712, "Desktop.pas" + 7) + $0 [206C13E6]{coreide270.bpl} Desktop.TDesktopStates.ProcessTerminated (Line 1818, "Desktop.pas" + 2) + $12 [20850478]{coreide270.bpl} DebuggerMgr.TProcessEvent.Send (Line 716, "DebuggerMgr.pas" + 2) + $14 [20854E34]{coreide270.bpl} DebuggerMgr.TDebuggerMgr.ProcessStateChanged (Line 2606, "DebuggerMgr.pas" + 8) + $E [2037386A]{dbkdebugide270.bpl} Debug.TDebugger.DoNotifyProcessStateChanged (Line 11425, "Debug.pas" + 2) + $18 [21067FC9]{designide270.bpl} ToolUtils.ForEach (Line 100, "ToolUtils.pas" + 5) + $F [203737C9]{dbkdebugide270.bpl} Debug.TDebugger.NotifyProcessStateChanged (Line 11417, "Debug.pas" + 27) + $22 [20375E09]{dbkdebugide270.bpl} Debug.TDebugger.ProcessDestroyedCallback (Line 12098, "Debug.pas" + 4) + $11 [2036FEAE]{dbkdebugide270.bpl} Debug.TProcess.SetProcessState (Line 9739, "Debug.pas" + 4) + $A [2036E7C5]{dbkdebugide270.bpl} Debug.TProcess.ntfyProcGone (Line 8975, "Debug.pas" + 6) + $4 [2036E856]{dbkdebugide270.bpl} Debug.TProcess.ntfyThreadGone (Line 9007, "Debug.pas" + 20) + $2 [302D669D]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $2B825 [302E48E2]{bordbk270N.dll} Unknown function at POSTEDHOOKPROC + $3A6E [302E490F]{bordbk270N.dll} Unknown function at POSTEDHOOKPROC + $3A9B [302E48E2]{bordbk270N.dll} Unknown function at POSTEDHOOKPROC + $3A6E [302E490F]{bordbk270N.dll} Unknown function at POSTEDHOOKPROC + $3A9B [302E5017]{bordbk270N.dll} Unknown function at POSTEDHOOKPROC + $41A3 [302E4FAB]{bordbk270N.dll} Unknown function at POSTEDHOOKPROC + $4137 [302DFCB3]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $34E3B [302B23A6]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $752E [302DF5DD]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $34765 [302CC670]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $217F8 [302CC657]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $217DF [302B86A5]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $D82D [302E8082]{bordbk270N.dll} Unknown function at POSTEDHOOKPROC + $720E [50CFBDBA]{vcl270.bpl } Vcl.Controls.TWinControl.DefaultHandler (Line 10464, "Vcl.Controls.pas" + 30) + $19 [302AEDA6]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $3F2E [302CBCFB]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $20E83 [302CBF95]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $2111D [302CD831]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $229B9 [302AEDA6]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $3F2E [302CD177]{bordbk270N.dll} Unknown function at @isDbkLoggingOn$qv + $222FF [50CFBDBA]{vcl270.bpl } Vcl.Controls.TWinControl.DefaultHandler (Line 10464, "Vcl.Controls.pas" + 30) + $19 [50CF6DC6]{vcl270.bpl } Vcl.Controls.TControl.WndProc (Line 7480, "Vcl.Controls.pas" + 91) + $6 [50064541]{rtl270.bpl } System.@FinalizeArray (Line 32995, "System.pas" + 24) + $6 [50F4D17E]{vcl270.bpl } Vcl.Styles.TStyleEngine.HandleMessage (Line 3598, "Vcl.Styles.pas" + 22) + $B [50DF39C0]{vcl270.bpl } Vcl.Themes.TStyleManager.HandleMessage (Line 5662, "Vcl.Themes.pas" + 11) + $11 [50CFBDBA]{vcl270.bpl } Vcl.Controls.TWinControl.DefaultHandler (Line 10464, "Vcl.Controls.pas" + 30) + $19 [50CF76DA]{vcl270.bpl } Vcl.Controls.TControl.WMMouseMove (Line 7712, "Vcl.Controls.pas" + 8) + $22 [50CF6DC6]{vcl270.bpl } Vcl.Controls.TControl.WndProc (Line 7480, "Vcl.Controls.pas" + 91) + $6 [50CF6A00]{vcl270.bpl } Vcl.Controls.TControl.Perform (Line 7258, "Vcl.Controls.pas" + 10) + $8 [5006EFFF]{rtl270.bpl } System.Types.TRect.Contains (Line 1675, "System.Types.pas" + 1) + $3 [50CFB2C4]{vcl270.bpl } Vcl.Controls.GetControlAtPos (Line 10143, "Vcl.Controls.pas" + 4) + $13 [50CFB3EE]{vcl270.bpl } Vcl.Controls.TWinControl.ControlAtPos (Line 10166, "Vcl.Controls.pas" + 13) + $E [50CFB471]{vcl270.bpl } Vcl.Controls.TWinControl.IsControlMouseMsg (Line 10184, "Vcl.Controls.pas" + 9) + $2A [50CF3600]{vcl270.bpl } Vcl.Controls.FindDragTarget (Line 5030, "Vcl.Controls.pas" + 6) + $1B [50CFBCAE]{vcl270.bpl } Vcl.Controls.TWinControl.WndProc (Line 10423, "Vcl.Controls.pas" + 168) + $6 [50CFBDBA]{vcl270.bpl } Vcl.Controls.TWinControl.DefaultHandler (Line 10464, "Vcl.Controls.pas" + 30) + $19 [50060AB4]{rtl270.bpl } System.TMonitor.TryEnter (Line 19684, "System.pas" + 10) + $0 [500605D4]{rtl270.bpl } System.TMonitor.Enter (Line 19345, "System.pas" + 4) + $2 [50060440]{rtl270.bpl } System.TMonitor.CheckOwningThread (Line 19259, "System.pas" + 2) + $0 [50060762]{rtl270.bpl } System.TMonitor.Exit (Line 19449, "System.pas" + 1) + $2 [500607BE]{rtl270.bpl } System.TMonitor.Exit (Line 19471, "System.pas" + 2) + $7 [50CD6FA3]{vcl270.bpl } Vcl.Graphics.FreeMemoryContexts (Line 7278, "Vcl.Graphics.pas" + 12) + $8 [50CFB230]{vcl270.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 10120, "Vcl.Controls.pas" + 3) + $6 [50CFB245]{vcl270.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 10123, "Vcl.Controls.pas" + 6) + $0 [50E5A727]{vcl270.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 11004, "Vcl.Forms.pas" + 25) + $1 [50E5A74A]{vcl270.bpl } Vcl.Forms.TApplication.ProcessMessages (Line 11024, "Vcl.Forms.pas" + 1) + $4 [004ABBB7]{bds.exe } AppMain.TAppBuilder.ApplicationActivated (Line 2579, "AppMain.pas" + 0) + $7 [50EBE3B7]{vcl270.bpl } Vcl.AppEvnts.TCustomApplicationEvents.DoActivate (Line 204, "Vcl.AppEvnts.pas" + 1) + $16 [50EBEA19]{vcl270.bpl } Vcl.AppEvnts.TMultiCaster.DoActivate (Line 425, "Vcl.AppEvnts.pas" + 5) + $10 [50E59C1F]{vcl270.bpl } Vcl.Forms.TApplication.WndProc (Line 10591, "Vcl.Forms.pas" + 126) + $C [50181184]{rtl270.bpl } System.Classes.StdWndProc (Line 17989, "System.Classes.pas" + 8) + $0 [50E5A71F]{vcl270.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 11002, "Vcl.Forms.pas" + 23) + $1 [50E5A762]{vcl270.bpl } Vcl.Forms.TApplication.HandleMessage (Line 11032, "Vcl.Forms.pas" + 1) + $4 [50E5AA95]{vcl270.bpl } Vcl.Forms.TApplication.Run (Line 11170, "Vcl.Forms.pas" + 26) + $3 [0051E104]{bds.exe } bds.bds (Line 222, "" + 13) + $2 This error appears on each project I tried. BTW: IDE Layouts don't apply correctly, either they remain at Debug layout mode after it ends debugging (after this error). Creating or opening a project keeps the Layout at <none>. Opening a .dpk (package) project, it remains showing the Welcome Page, I have to manually switch to Default Layout in order to see the package project files to install it. In case it has something to do, I just updated to Windows 10 version 2004 May Update 2020, before installing it I uninstalled Delphi 10.4 and reinstalled after updating Windows 10 (1909 to 2004). Previously installation (first installation), this error was not present. Sorry my bad english.
  11. I don't really know, but after installing some few components, making a backup of registry shows that it is a big text file, I didn't know it could contain many reg binary entries, specially for cache purposes as its keys (in registry) name suggests. At least, now I know that restoring the registry fixes it, so I won't be reinstalling it completely.
  12. I'm here again, with the same issue 😢 Today I started the IDE, after a week not using it, last time I reinstalled was working fine. Now it shows the registration window again. Registry entries seems to have been deleted, I don't know what would have caused that, checking the files in ProgramFiles(x86) and ProgramData reports no changes. I don't know where else files might trigger that behavior. (Emptied Registry Entries) After closing the License Manager, C:\ProgramData\Embarcadero new files are added, .\.cg_license and .licenses\.cg_license Thankfully I had a backup from registry, I just imported and it launched without errors. Notice that in this last installation I haven't installed any IDE plugin/component and no errors were shown as in previous experience, but computer restarted once while IDE was open, but I don't remember a correlation since I started the IDE after the restart.
  13. I also noticed, that registry in Windows clears values about Embarcadero HKEY_CURRENT_USER\Software\Embarcadero, ETM FireDac Locales disappears, and BDS is empty. After reinstalling everything is OK, but it is annoying, I will monitor file changes in installation path and programdata in order to find out what is causing this issue.
×