Autor Téma: zoomování cizího formulářového okna  (Přečteno 261 krát)

Offline petricek

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
    • Verze Delphi: Turbo Delphi
zoomování cizího formulářového okna
« kdy: 12-07-2017, 15:17:24 »
Spouštím jednoduchou aplikaci, kde ve formulářovým okně je spuštěno více oken několika aplikací, je to pro dálkový dohled z jednoho monitoru tak, aby se všechny spustily najednou a pěkně jsem je měl jako dlaždice vedle sebe na monitoru. Znám tedy vždy cestu k exe konkétního programu, najdu si handle okna a posunu si ho do konkrétního místa formuláře, aby se tam automaticky vedle sebe porovnaly další okna. Maličko však teď už bojuju s místem a potřeboval bych odzoomovat okna těch programů (lupa -), ne měnit rozměr okna. Nějak nemohu přijít jak na to, použít funkci ScaleBy(), která jinde funguje.
poloha okna mám v proceduře:
Kód: Delphi [Vybrat]
  1.  //kód
  2. Windows.SetParent(KonkretniSpoustenyProgramHandle, Handle );
  3. //kód
  4. ShowWindow(KonkretniSpoustenyProgramHandle, SW_SHOW);
  5. //kód
  6. if IsWindow(KonkretniSpoustenyProgramHandle) then begin
  7.   SetWindowPos(KonkretniSpoustenyProgramHandle, 0, 0, 50, 100, 100, SWP_ASYNCWINDOWPOS);
  8. ScaleBy(80,100);
pak se v tom rodičovském formuláři opravdu načte nově cílený podprogram, ve správné poloze, ale zmenšení zoomem se už na něj neprovede, avšak na tom rodičovském formuláři ano. Přitom focus zůstane na cíleně spuštěném podprogramu.
Jak donutit ScaleBy aby nebyl aplikován na rodič. formuláři a zoom se naopak aplikoval na spuštěném podprogramu?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1687
  • Karma: 69
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:zoomování cizího formulářového okna
« Odpověď #1 kdy: 12-07-2017, 22:39:40 »
No ScaleBy je IMHO interní věc VCL.
Popravdě mne překvapilo ten zbytek, tj. že se ti zobrazí okno cizího programu v rámci okna, ale dejme tomu, když o tom přemýšlím, tak to asi možné je. Ale nikde jsem ve Windows nenarazil na možnost zoomnout okno aplikace.

Jediné co mne napadá je tipnout obsah okna jako bitmapu, tu resiznout a zobrazit a tak dále až do blba. Ale třeba fakt něco jako zoom okna ve windows existuje.
Embarcadero MVP - Czech republic

Offline petricek

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
    • Verze Delphi: Turbo Delphi
Re:zoomování cizího formulářového okna
« Odpověď #2 kdy: 13-07-2017, 07:43:45 »
No, v příloze jsem poskládal printscreeny pro příklad se dvěma případy zmenšení okna. První nejvyšší je výchozí okno po spuštění základního prográmku. Ťuknu na tlačítko načti program a natáhne se mi (jakýkoli přednastavený) program. Pak ťuknu na tl. změň lupu a druhé okno ukazuje, co se stane. Rozměr mateřského okna se o chtěných 20 procent zmenší a to i s tlačítky, ale ne na spouštěném programu poznámk. bloku (kde to má být aplikováno), ale na rodičovském hlavním. Pro efekt ještě jednou třetí obrazovka ještě jednou aplikováno zmenšení o 20 procent, ten poznámkový blok sedí jak přibitý a zmenšuje se jen mateřská aplikace. Kdybyste měli nápad...

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1743
  • Karma: 75
    • Verze Delphi: D2007, XE3, DX10
Re:zoomování cizího formulářového okna
« Odpověď #3 kdy: 13-07-2017, 08:34:05 »
No, v příloze jsem poskládal printscreeny pro příklad se dvěma případy zmenšení okna. První nejvyšší je výchozí okno po spuštění základního prográmku. Ťuknu na tlačítko načti program a natáhne se mi (jakýkoli přednastavený) program. Pak ťuknu na tl. změň lupu a druhé okno ukazuje, co se stane. Rozměr mateřského okna se o chtěných 20 procent zmenší a to i s tlačítky, ale ne na spouštěném programu poznámk. bloku (kde to má být aplikováno), ale na rodičovském hlavním. Pro efekt ještě jednou třetí obrazovka ještě jednou aplikováno zmenšení o 20 procent, ten poznámkový blok sedí jak přibitý a zmenšuje se jen mateřská aplikace. Kdybyste měli nápad...
To zase jen popisujes to same...

Radek ti psal, ze metoda ScaleBy() je vnitrni zalezitosti VCL, ktera se aplikuje na strom widgetu, ze kterych se tvoje okno sklada. Ovsem okno cizi aplikace v tom stromu na urovni VCL neni. Tys jeji okno misto do desktopu vlozil do sveho okna, ovsem na urovni handle, cimz jsi VCL obesel.

Pokud neco takoveho vubec pujde, tak snad jenom pres https://msdn.microsoft.com/en-us/library/windows/desktop/ms692162(v=vs.85).aspx, coz je relativne nova zalezitost, ale s tim jsem nikdy nic nedelal.

V kazdem pripade je to urceno pro zoomovani vlastnich widgetu, takze tezko odhadnout, zda se podari nejak presvedcit cizi okno, aby se chovalo jako Magnifier control

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1687
  • Karma: 69
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:zoomování cizího formulářového okna
« Odpověď #4 kdy: 13-07-2017, 08:58:32 »
Excellent
Rated 1 time
Pokud neco takoveho vubec pujde, tak snad jenom pres https://msdn.microsoft.com/en-us/library/windows/desktop/ms692162(v=vs.85).aspx, coz je relativne nova zalezitost, ale s tim jsem nikdy nic nedelal.


Zajímavá informace, jen doplním že je poznámka: The Magnification API is not supported under WOW64; that is, a 32-bit magnifier application will not run correctly on 64-bit Windows.
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1743
  • Karma: 75
    • Verze Delphi: D2007, XE3, DX10
Re:zoomování cizího formulářového okna
« Odpověď #5 kdy: 13-07-2017, 09:14:57 »
Excellent
Rated 1 time
Zajímavá informace, jen doplním že je poznámka: The Magnification API is not supported under WOW64; that is, a 32-bit magnifier application will not run correctly on 64-bit Windows.
No zrejme je to pro dany ucel k nicemu, protoze kdyz jsem se zacetl, tak tam pisou:
A magnification factor less than 1.0 is not valid.

Offline petricek

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
    • Verze Delphi: Turbo Delphi
Re:zoomování cizího formulářového okna
« Odpověď #6 kdy: 13-07-2017, 09:33:26 »
Poor
Rated 1 time
Díky oběma. Já to nějak intuitivně tušil, ale zase zkoušet jsem vás nechtěl  ;)
Obecně aplikace pro Win dělám okrajově a s archaickou oblibou a sentimentem pro Delphi, protože se majoritně věnuji hw a tiše doufám, že do sklonku mého příležitostného "programování" si vystačím stejně jako posledních cca 15 let s Turbo Delphi nástrojema. S tím scalingem pod 1.0 u Magnification API je tato cesta slepou. Asi bude jediný rozumný a postačující řešení, že by to šlo s těma printscreenama, vždycky s periodou třeba 1-2 s sejmout všechny čtyři obrazovky a ty resajznout na menší, pak seřadit na jednu placku monitoru, protože rychlejší odezvy nejsou nutné, jedná se o dlouhodobý monitoring dohledových aplikací na více počítačích různě po objektu.
Zeptám se úplně mimo toto téma, omlouvám se - nechci zakládat nové vlákno. Má dělaná aplikace v Turbo Delphi šanci, že se nechá spustit nejen na současných W10, tedy i na dalších win OS (malinko věštění z koule) nebo má spíš naději ji už dělat ve free nástroji Lazurusu? Na W7 64 bit no problem, ale docela jsem už měl problém před dvěma rokama TD nainstalovat na W8.1 64bit a u W10 jsem raději ještě nezkoušel. Ještě jednou díky za odpovědi.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1687
  • Karma: 69
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:zoomování cizího formulářového okna
« Odpověď #7 kdy: 13-07-2017, 09:42:26 »
Zeptám se úplně mimo toto téma, omlouvám se - nechci zakládat nové vlákno. Má dělaná aplikace v Turbo Delphi šanci, že se nechá spustit nejen na současných W10, tedy i na dalších win OS (malinko věštění z koule) nebo má spíš naději ji už dělat ve free nástroji Lazurusu? Na W7 64 bit no problem, ale docela jsem už měl problém před dvěma rokama TD nainstalovat na W8.1 64bit a u W10 jsem raději ještě nezkoušel. Ještě jednou díky za odpovědi.

Pleteš aplikaci udělanou v Turbo Delphi a vlastní Delphi. Delphi samotné má hodně závislostí a v některých věcech (jako laděni) je integrováno celkem "hluboko" do systému. Ale nic ti nebrání používat pro vývoj virtuální stroj s Windows 7 až do bude třeba.

Aplikace napsaná v Turbo Delphi pak samozřejmě má takové problémy jaké udělá její programátor. Ale neočekávám nějaké zásadní problémy s kompatibilitou v dohledné (dejme tomu 10 let).
Embarcadero MVP - Czech republic

Offline petricek

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
    • Verze Delphi: Turbo Delphi
Re:zoomování cizího formulářového okna
« Odpověď #8 kdy: 13-07-2017, 10:05:26 »
Poor
Rated 1 time
S tím virtuálním OS mě tohle nenapadlo, tak budu doufat, že ještě hezkých pár let budou aspoň do verze W7 poskytovat instalaci na virtuálním stroji. Jen doufám, že jim ještě dlouho nerupne v bedně, aby změnili politiku a típnou i tohle.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: