Autor Téma: Vzdálená plocha a RoundRect funkce - chybně se vykresluje  (Přečteno 1121 krát)

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 251
  • Karma: 0
Dobrý den,

setkal se někdo s podobným problémem? V Delphi 6 mám vlastní komponentu - tlačítko, kreslenou pomocí funkce Canvas.RoundRect(). Pokud aplikaci spustím na libovolném počítači (WinXP, 8, 10), vše je v pořádku. Pokud se ale na aplikaci podívám pomocí vzdálené plochy, vykreslují se zaoblené rohy chybně - jsou kostrbaté, nebo úplně chybí. Nezáleží, zdali se vzdáleně dívám na WinXP, nebo 10 a naopak. V čem by mohl být problém?

Děkuji.

S pozdravem,
Age



Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2766
  • Karma: 105
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #1 kdy: 30-10-2017, 19:22:45 »
Dival ses do moznosti pripojeni vzdalene plochy? Da se tam nastavit Výkon, případně barevná hloubka.
Embarcadero MVP - Czech republic

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 251
  • Karma: 0
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #2 kdy: 31-10-2017, 07:45:55 »
Vyzkoušeli jsme nejpomalejší a nejrychlejší typ komunikace a s tím spojené nastavení přenášení stylů atp ... a bez úspěchu. Tlačítka mají chybně vykreslené rohy.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1023
  • Karma: 29
    • Verze Delphi: XE8, Seattle
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #3 kdy: 31-10-2017, 10:11:46 »
Jak to vypadá na obrázku?
My měli obdobný problém, který spočíval v chybně nastaveném rozlišení (bylo to taky kostrbaté) a v nízké barevné hloubce (jen 8 bit. která se ještě navíc zkazila při zobrazení dle palety)

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 251
  • Karma: 0
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #4 kdy: 31-10-2017, 10:53:47 »
Obrázek jsem přiložil. Jedná se o tlačítko 126x82 a zaoblení má hodnotu 20px. V tomto případě se zaoblení vůbec nevykreslilo. Pokud zadám jinou hodnotu zaoblení, například 10px, tak se může vykreslit, ale i tak kresba rohu bude nedokonalá, kostrbatá a deformovaná.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 1134
  • Karma: 49
    • Verze Delphi: 10.3
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #5 kdy: 31-10-2017, 11:20:17 »
Jak to dopadne, když ten oblouček vykreslíte "ručně" pomocí krátkých čar?
Já nedávno narazil na to, že Windows špatně zobrazí eliptický oblouk (zejména tedy s velkými rozměry), třeba to nějak vzdáleně souvisí.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2766
  • Karma: 105
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #6 kdy: 31-10-2017, 11:24:41 »
Zkus:
-  v dpr {$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
- v komponente nastavit nebo vypnout DoubleBuffered
Embarcadero MVP - Czech republic

97353

  • Host
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #7 kdy: 31-10-2017, 11:49:31 »
Obrázek jsem přiložil. Jedná se o tlačítko 126x82 a zaoblení má hodnotu 20px. V tomto případě se zaoblení vůbec nevykreslilo. Pokud zadám jinou hodnotu zaoblení, například 10px, tak se může vykreslit, ale i tak kresba rohu bude nedokonalá, kostrbatá a deformovaná.

Pri pouziti GDI bude ta kresba kostrbata i pri spusteni na strane klienta (s GDI+ muze byt pres RDS dle MS jeste vetsi utrum). Stavil bych se pro AggPas, nebo Graphics32.
« Poslední změna: 31-10-2017, 12:13:57 od 97353 »

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1023
  • Karma: 29
    • Verze Delphi: XE8, Seattle
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #8 kdy: 31-10-2017, 12:49:13 »
Mám odzkoušeno, že je možná lepší použít vlastní bitmapu, a tu pak blitnout na tlačítko, než to vykreslovat přímo na canvas. Ale... terminály to posílají jako obrázky a je otázka, co s tím udělají různé přepočty měřítek a vnitřní optimalizace dlaždic obrázků :(

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 251
  • Karma: 0
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #9 kdy: 01-11-2017, 07:03:02 »
Zkus:
-  v dpr {$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
- v komponente nastavit nebo vypnout DoubleBuffered

- příznak vyzkouším
- v komponentě DoubleBuffered nemám, ale může ji mít formulář na kterém je komponenta.

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 251
  • Karma: 0
Re:Vzdálená plocha a RoundRect funkce - chybně se vykresluje
« Odpověď #10 kdy: 01-11-2017, 07:07:27 »
Jinak samozřejmě, že když rohy nakreslím pomocí sin cos tak bude vše v pořádku (vyzkoušeno). Přišlo mi nahrazení hromady kódu pomocí jednoho řádku RoundRect jako lepší řešení.

Šlo by použít bitmapu, složit tvar tlačítka pomocí 4xLine a 4xArc atd ... řešení se nabízí. Jen mě překvapilo proč se tak děje. Tato funkce obecně je podivná. Pokud vytvoříte roundrect s rozdílnou výškou oproti délce, nevznikne přesný roh, ale je deformovaný. Záleží na poměru stran. Pouze pokud vytvoříte čtverec, je zaoblení "hezké".