Autor Téma: Aplikace s dark skin a HTML help  (Přečteno 467 krát)

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 185
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Aplikace s dark skin a HTML help
« kdy: 27-02-2021, 12:36:31 »
Všiml jsem si toho až teď.
Pokud nastavím u aplikace tmavý skin, třeba Carbon a zavolám HTML help - standardně přes přiřazení
Kód: Delphi [Vybrat]
  1. Application.HelpFile := 'nejaky CHM soubor';
  2. //a zavolám
  3. HtmlHelp(Application.Handle, Application.Helpfile, HH_DISPLAY_TOC, 0);
  4. // případně:
  5. Application.HelpShowTableOfContents;
Tak obsah helpu je bílý, ale levý pruh, kde je seznam témat, hedání atd. je tmavý podle skinu, takže černé písmo na skoro černém pozadí. Samozřejmě tam nejde nic přečíst.

Abych vyloučil chybu mnou vytvořeného helpu, zkusil jsem help od TotalCommanderu a výsledek je stejný.
Neřešil to někdo?

D 10.4.1
« Poslední změna: 27-02-2021, 12:49:25 od Jan Fiala »

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 185
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Aplikace s dark skin a HTML help
« Odpověď #1 kdy: 27-02-2021, 13:42:30 »
Ještě poznámka.
Přímé zavolání HTMLHelp() je v pořádku, zavolání přes Application.Helpneco zobrazí formulář špatně.

Offline Slappy

  • Plnoletý
  • ***
  • Příspěvků: 241
  • Karma: 12
  • Slappy
    • Verze Delphi: 10.2 Tokyo + Vsetky :)
    • unSigned
Re:Aplikace s dark skin a HTML help
« Odpověď #2 kdy: 27-02-2021, 14:42:47 »
Znamena to, ze sa pracuje na Dark Theme pre PSPad?
Moje projekty: http://www.unsigned.sk Tvorba cool dizajnovych instalatorov v NSIS a Inno Setup. Rozsirenie pre Visual Studio a RAD Studio pre tvorbu NSIS a Inno Setup instalatorov.

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 185
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Aplikace s dark skin a HTML help
« Odpověď #3 kdy: 02-03-2021, 16:42:16 »
Znamena to, ze sa pracuje na Dark Theme pre PSPad?

To už tam nějakou dobu je. Ale pořád to má své mouchy - je to pomalejší, občas to překresluje, ale je to použitelné. Být to na mě, tak jsem to nedělal. Je to spousta práce navíc.
Nejjednodušší přepnutí je v nastavení programu / Barvy, změnit skin třeba na carbon a načíst PSPad dark schéma, případně kombinace Slate Gray.

Pro hračičky stačí libovolný VSF soubor uložit do podsložky Skin a je k dispozici.

Offline Slappy

  • Plnoletý
  • ***
  • Příspěvků: 241
  • Karma: 12
  • Slappy
    • Verze Delphi: 10.2 Tokyo + Vsetky :)
    • unSigned
Re:Aplikace s dark skin a HTML help
« Odpověď #4 kdy: 04-03-2021, 19:11:21 »
Znamena to, ze sa pracuje na Dark Theme pre PSPad?

To už tam nějakou dobu je. Ale pořád to má své mouchy - je to pomalejší, občas to překresluje, ale je to použitelné. Být to na mě, tak jsem to nedělal. Je to spousta práce navíc.
Nejjednodušší přepnutí je v nastavení programu / Barvy, změnit skin třeba na carbon a načíst PSPad dark schéma, případně kombinace Slate Gray.

Pro hračičky stačí libovolný VSF soubor uložit do podsložky Skin a je k dispozici.

Tak o tomto som vobec nevedel, vyskusal som to a je to bomba! Vyskusal som viacero stylov a najviac sa mi pozdava SlateGray (nie je ani prilis tmavy ani svetly):

Editor, ktory neponuka Dark Theme je v dnesnej dobe podstate out, preto aj samotne Delphi prislo s Dark Theme, podobne GitHub atd. atd.



Co sa tyka toho "bugu" tak ano - pri pouziti DarkTheme je HtmlHelp zafarbeny temou a teda necitatelny.

Jedine co mozem odporucit je pozriet si https://github.com/jrsoftware/issrc/blob/c2b38b3ae46ba56833e9a804fa46d9bb6975ada9/Projects/HtmlHelpFunc.pas

Tento kod pouziva Inno Setup a ja som sa nim inspiroval pri svojom nastroje RAD & Installer a problem s Dark Theme sa nevyskytuje, snad to pomoze.

Pripadne este mi napada pouzit GetDesktopWindow namiesto Application.Handle

Kód: Delphi [Vybrat]
  1. procedure ShowHelp(const Command: String);
  2. var
  3.   HelpFile, Path: String;
  4.   Found: Boolean;
  5.   KLink: THH_AKLINK;
  6.  
  7. begin
  8.   Found := False;
  9.  
  10. {$IFDEF  INNOSETUP_PROJECT}
  11.   Path := DetectInnoSetupInstalled;
  12.   if not String_IsNullOrEmpty(Path) then
  13.   begin
  14.       HelpFile := Path + 'ISetup.chm';
  15.       Found := True;
  16.   end;
  17.  
  18.   if not FileExists(HelpFile) then
  19.     Application.MessageBox(PChar('Help file (ISetup.chm) was not found. Is Inno Setup installed correctly?'), PChar('RAD & Installer'), MB_ICONEXCLAMATION);
  20. {$ENDIF}
  21.  
  22. {$IFDEF  NSIS_PROJECT}
  23.   Path := DetectNSISInstalled;
  24.   if not String_IsNullOrEmpty(Path) then
  25.   begin
  26.       HelpFile := Path + 'NSIS.chm';
  27.       Found := True;
  28.   end;
  29.  
  30.   if not FileExists(HelpFile) then
  31.     Application.MessageBox(PChar('Help file (NSIS.chm) was not found. Is NSIS installed correctly?'), PChar('RAD & Installer'), MB_ICONEXCLAMATION);
  32. {$ENDIF}
  33.  
  34.   if (Assigned(HtmlHelp) and Found) then
  35.   begin
  36.     if Assigned(HtmlHelp) then begin
  37.       HtmlHelp(GetDesktopWindow, PChar(HelpFile), HH_DISPLAY_TOPIC, 0);
  38.       if Command <> '' then begin
  39.         FillChar(KLink, SizeOf(KLink), 0);
  40.         KLink.cbStruct := SizeOf(KLink);
  41.         KLink.pszKeywords := PChar(Command);
  42.         KLink.fIndexOnFail := True;
  43.         HtmlHelp(GetDesktopWindow, PChar(HelpFile), HH_KEYWORD_LOOKUP, DWORD(@KLink));
  44.       end;
  45.     end;
  46.  
  47.   end;
  48. end;



Moje projekty: http://www.unsigned.sk Tvorba cool dizajnovych instalatorov v NSIS a Inno Setup. Rozsirenie pre Visual Studio a RAD Studio pre tvorbu NSIS a Inno Setup instalatorov.

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 185
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Aplikace s dark skin a HTML help
« Odpověď #5 kdy: 06-03-2021, 16:22:28 »
Děkuji, asi to bude cesta správným směrem, jen to musím zabudovat do aplikace, protože tam jdu přes ContextID ne přes jména odkazů.

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 185
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Aplikace s dark skin a HTML help
« Odpověď #6 kdy: 06-03-2021, 18:37:47 »
Takže jsem se inspiroval
bez nějakých velkých změn aplikace se to dá vyřešit jednoduše - ponecháno standardní volání typu Application.HelpContext(2), případně ponechání volání na aplikaci při stisknutí F1, kdy se helpu předává Help context ID z formuláře nebo komponenty
Stačí přepsat Application.OnHelp a volat rovnou HTMLHelp()
Podstatou je opravdu jako handle předat GetDesktopWindow, jinak se standardně předává handle naskinovaného okna aplikace

v OnCreate hlavniho formu:
Kód: Delphi [Vybrat]
  1. Application.OnHelp := ApplicationEventsHelp;

Kód: Delphi [Vybrat]
  1. function TMojeAplikace.ApplicationEventsHelp(Command: Word; Data: THelpEventData; var CallHelp: Boolean): Boolean;
  2. begin
  3.   CallHelp := False;  // help budeme spoustet sami
  4.   Result := True;
  5.   // tohle je vyjimka, protoze misto Application.HelpShowTableOfContents (tohle jde ve VCL jinudy) volam Application.HelpContext(0)
  6.   if (Command = HH_DISPLAY_TOC) and (Data = 0) then
  7.     HtmlHelp(GetDesktopWindow, Application.Helpfile, HH_DISPLAY_TOC, Data)
  8.   else
  9.   // tohle jsem trosku nepochopil, ale HH_SET_INFO_TYPE se vola pri stisknuti F1 v aplikaci
  10.   if (Command = HH_DISPLAY_TOC) or (Command = HH_SET_INFO_TYPE) then
  11.     HtmlHelp(GetDesktopWindow, Application.Helpfile, HH_HELP_CONTEXT, Data);
  12. end;

A to je vše, žádné další věci není třeba měnit.