Forum: PC-Programmierung C# In welcher Einheit ist Microsoft.Office.Interop.PowerPoint.SlideShowWindow.Width


von FOp (Gast)


Lesenswert?

Ich möchte aus meiner C# Anwendung heraus Power-Point-Präsentationen 
starten und auf Monitoren verteilen. Dazu wollte ich die Eigenschaften 
Left, Top, Width und Height von 
Microsoft.Office.Interop.PowerPoint.SlideShowWindow setzen. Die sind 
aber wohl nicht in Pixeln angegeben. Ich teste jetzt unter Windows 10. 
Von jeweils 3 Monitoren ist einer auf Skalierung 125%, die beiden 
anderen auf Skalierung 100% gestellt.
In einer Konfiguration ist zwischen den von mir erwarteten Werten in 
Pixeln und den vorgefundenen Werten der Faktor 0,75. Nach dem Tausch von 
2 Monitoren ist der Faktor 0,6. Wobei der eine nochmal zusätzlich mit 
dem Faktor 1,25 umgerechnet werden muss, das ist aber nicht das Problem.

Woher kommt dieser Umrechnungsfaktor und wie kann ich dessen Wert 
ermitteln ?

von Schlaumaier (Gast)


Lesenswert?

Sehr wahrscheinlich in Twips.

von Schlaumaier (Gast)


Lesenswert?


von Dirk K. (merciless)


Lesenswert?

https://docs.microsoft.com/en-us/previous-versions/office/office-12/ff760548(v=office.12) 
sagt die Einheit sind Points (was auch immer man darunter verstehen 
soll). Ich denke, du musst die Auflösung des Monitors ermitteln und 
damit rechnen.

merciless

von Schlaumaier (Gast)


Lesenswert?

Dirk K. schrieb:
> sagt die Einheit sind Points (was auch immer man darunter verstehen
> soll)

points = punkte.

Was man darunter versteht. Siehe mein Link.

von FOp (Gast)


Lesenswert?

Danke schon mal für Eure Erklärungen. Aber es scheint doch komplizierter 
zu sein, oder ich habe hier noch einen Fehler.

Es geht um ein Notebook mit fest eingebauten Display, das auf empfohlene 
1920x1080 Pixel mit 125% Skalierung eingestellt ist.

Nun stöpsele ich 2 Monitore daran an. Stelle ein, dass sich das 
Notebookdisplay rechts der beiden Monitore befindet und starte die 
Präsentation. Durch die vorher in PowerPoint gemachten Einstellungen 
startet die Präsentation im Vollbildmodus auf dem Notebookdisplay. Wenn 
ich nun auslese, bekomme ich für Width 1440 und für Height 810.

Neuer Tag, neues Glück. Ich verbinde das selbe Notebook anstatt der 
vorher genutzten mit 2 anderen Monitoren. Stelle ein, dass das 
Notebookdisplay in der Mitte zwischen den beiden steht, Auflösung und 
Skalierung lasse ich für das Notebookdisplay gleich. Starte die 
Präsentation. Durch die vorher in PowerPoint gemachten Einstellungen 
startet die Präsentation im Vollbildmodus auf dem Notebookdisplay. Wenn 
ich nun auslese, bekomme ich für Width 1152 und für Height 648.

Über GetDpiForWindow(handle) oder das Verhältnis GetDeviceCaps(handle, 
DESKTOPVERTRES) / GetDeviceCaps(handle, VERTRES) komme ich immer nur auf 
die 125%.

von Rolf M. (rmagnus)


Lesenswert?

Dirk K. schrieb:
> sagt die Einheit sind Points (was auch immer man darunter verstehen
> soll)

Das ist eine dieser kranken imperialen Maßeinheiten:
https://de.wikipedia.org/wiki/Schriftgrad#DTP-Punkt

von Schlaumaier (Gast)


Lesenswert?

FOp schrieb:
> Über GetDpiForWindow(handle) oder das Verhältnis GetDeviceCaps(handle,
> DESKTOPVERTRES) / GetDeviceCaps(handle, VERTRES) komme ich immer nur auf
> die 125%.

Du brauchst auch andere Werte. ;)

Die 125% geben dir die Skalierungsauflösung an.

So wie ich das mit Powerpoint verstehe, ist die Bildschirm-Anzeige 
EGAL.!!!
Ich denke das PP auf die Seitengröße eingestellt ist. Es nennt sich da 
ja nicht Frames sondern Folie. !!! Die echte Bildschirm-Skalierung 
übernimmt dann PP selbst.

https://docs.microsoft.com/en-us/previous-versions/office/office-12/ff763752(v=office.12)

Siehe dazu auch

https://docs.microsoft.com/en-us/previous-versions/office/office-12/ff761806(v=office.12)

Ich würde also "Ausnahmsweise" die Bildschirmauflösung vergessen, und 
die Seiten-Einstellung nehmen als Größen-Reference.

Ist aber nur eine Idee. Ich nutze interop nur mit Excel. Aber da kann 
ich es im Schlaf. ;)

Also einfach mal testen. ;)

von Schlaumaier (Gast)


Lesenswert?

Kleiner Hinweis der vielleicht Sinn macht.

In VB benutze ich wenn ich einen Seite bei A4 Normal ausdrucken will die 
Formel

cm = 2.5

von_links = cm * 39

Zur Berechnung des linken Abheftrand.


Ist zwar nicht sehr genau aber mir reicht es.

Wenn du es genau haben willst musst du

Seite Deklarieren durch Format-Auswahl und dann

genau_faktor = Pagesize.width / 21.1 machen (A4)

Wie gesagt, ich schreibe nur für Standard-A4-Hoch wie es JEDER Deutscher 
Drucker normal macht.

von Bentschie (Gast)


Lesenswert?

Was ich letztens hatte, es kann bei Windows vorkommen, das die Auflösung 
des "Desktops" nicht die ist, was er wirklich ausgibt.

Soweit icgh das verstanden habe, liegt das am Display. Wenn bei zwei 
Monitoren und geklonter Anzeige, einer von beiden die Auflösung nicht 
kann, so zeigt Windows in der Systemsteuerung trotzdem die gewünschte 
Auflösung an, gibt das Signal aber in einer Anderen Auflösung aus.

Das hatt bei mir zur Folge, das das Video, exakt in Desktopauflöusng auf 
dem Beamer das falsche Seitenverhältniss hatte und furchtbar aussah.

Siehe Win 10:
 -> Einstellungen -> Anzeige -> "Erweiterte Anzeigeeinstellungen"(ganz 
unten)
 Dort gibt es die
 "Desktopauflösung" und die
 "Aktive ASignalauflösung"

Ich bin mir nicht sicher, ob das zu deinem Thema passt, das war aber 
eine fiese Stolperstelle. Und jedem ITler dem ich das erzählt habe, hat 
mich verwundert angeschaut.

von Schlaumaier (Gast)


Lesenswert?

Bentschie schrieb:
> Und jedem ITler dem ich das erzählt habe, hat
> mich verwundert angeschaut.

Ich nicht.

Ich kenne diese miesen Tricks seit Win 3.11
Siehe oben, mit den Hoch-Format-Monitor. Ich bekam einfach nicht die 
richtige Info. Wobei mein Verdacht ist, das der Treiber das 
selbstständig machte.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.