2014-05-01 29 views
5

Mam aplikację WinForms (w Visual Studio 2010), która zawiera kontrolkę Report Viewer, która wyświetla podgląd i drukuje raport o formacie A4.Report Viewer - problem skalowania ze zmianą DPI systemu

Jeden użytkownik ma ustawiony rozmiar czcionki systemu Windows na 150% (tj. Systemową zmianę DPI), a po uruchomieniu raportu jest zmniejszany do rozmiaru 2/3 zarówno w podglądzie Podgląd raportu, jak i w wydrukowanym raporcie.

Właściwość AutoScaleMode formularza zawierającego Przeglądarka raportów jest ustawiona na "Czcionka", chociaż wydaje się, że nie wpłynie to na raport, jeśli to zmienię.

To nie jest problem z czcionką (brakującą/skalującą), ponieważ mam przykładowy program do zademonstrowania problemu, który zawiera tylko prostokąt, który zajmuje całą stronę.

Wygląda na to, że potrzebuję jakiegoś sposobu, aby określić w samym raporcie, że powinien on być renderowany na poziomie 96dpi niezależnie od ustawienia systemu dpi, ale nie widzę nigdzie tego, co mogę określić. czego mi brakuje?

Dzięki David

+0

Przeglądarka raportów to czarna ramka. Zgłoś DPI, skalując błędy na connect.microsoft.com, aby je naprawić. –

+0

Ten sam numer, ale w 2012 roku. Podgląd wydruku i wydrukowany raport zawierają skurczoną zawartość. To jest jak obliczenie, aby zrekompensować zwiększony ekran DPI poszło nie tak. Czy znalazłeś jakiś sposób, aby to naprawić? – Gavin

+1

@Gavin - nie, nie znalazłem poprawki. Aby obejść ten problem, wybranie opcji "Wyłącz skalowanie wyświetlacza w przypadku ustawień wysokiej rozdzielczości" w ustawieniach zgodności dla .exe wydaje się rozwiązać problem (dotyczy to systemu Windows 7). –

Odpowiedz

3

wpadłem na ten sam problem. WinForms ReportViewer jest już świadomy DPI i zrobi własne skalowanie. Musisz tylko powiedzieć systemowi, że twoja aplikacja jest świadoma DPI, więc system nie próbuje go skalować później.

Dodaj oczywisty do aplikacji, jeśli jeszcze go nie masz, a następnie wewnątrz znacznika, należy dodać następujące:

<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > 
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
     <dpiAware>true</dpiAware> 
    </asmv3:windowsSettings> 
    </asmv3:application> 

Można również użyć funkcji API SetProcessDPIAware, ale zaleca się przed: http://msdn.microsoft.com/en-us/library/ms633543.aspx

+0

Miałem ten sam problem i to naprawiło. – Daws

+0

Mam "ReportViewer" Win Forms osadzone w aplikacji WPF przy użyciu formantu 'WindowsFormsHost'. Aplikacje WPF zawsze rejestrują się jako świadome DPI, ale "ReportViewer" wykazuje to zachowanie problemu, więc to rozwiązanie nie pomaga. –