Laden...

Drucken deaktivieren/Menü, Ribbon deaktivieren

Erstellt von NeueWelt vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.725 Views
N
NeueWelt Themenstarter:in
54 Beiträge seit 2011
vor 11 Jahren
Drucken deaktivieren/Menü, Ribbon deaktivieren

Hallo,

Ich versuche hauptsächlich die Druckfunktion eines Worddokumentes zu verbieten, zusätzlich will ich das Menü/Ribbons alle bis auf eins ausblenden.

über die Forumssuche habe ich dieses Thema gefunden:
Menüs in bzw. von Word ausblenden

Ich habe mir für die Foreach schleife einen speraten Thread gebaut aber der Fehler besteht weiterhin:


//Es ist ein Word 2010 Document über Visualstudio
//die ersten zwei Zeilen befinden sich in ThisDocument_Startup
  Thread t = new Thread(Write);      
          t.start();

 public void Write()
        {
            Thread.Sleep(10000);
            foreach (Office.CommandBar cbar in Application.ActiveWindow.Application.CommandBars)
            {
                    cbar.Visible = false; //Hier tritt Fehler auf
                    cbar.Enabled = false;
            }
            MessageBox.Show("Fertig");                  
        }

Fehler: Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben

Hat jemand noch eine Idee, funktioniert das überhaupt?

Dann zum zweiten Punkt mit den Ribbons, hab mich bisschen umgesehen und gefunden wie man alle Ausblenden und eins behalten kann. Jedoch ist das Ribbon "Datei" davon nicht betroffen. Wie kann ich "Datei" ausblenden?

Oder weiß jemand vll eine ganz andere Lösung um das Drucken zu verbieten und/oder das Menü einzuschränken?

danke schonmal,
NeueWelt

mfg

Gelöschter Account
vor 11 Jahren

Ist das auslagern in einen anderen Thread zwingend notwendig?
Multithreading in Verbindung mit COM/Office sollte man nach Möglichkeit vermeiden ausser man hat die notwendigen Kentnisse. (Die Materie ist tatsächlich recht kompliziert)

Welche Möglichkeit die Menüs auzublenden ist das genau? Ich vermute mal der reduzierte Modus(startFromScratch) wo Office Anwendungen alle Standard Menüs ausblenden bist auf die benutzerdefinierten?

Das Datei Menü auszublenden ist meines bisherigen Kentnisstands nicht möglich allerdings ist das BeforePrint Ereigniss für dich vielleicht interessant. Mit dem ref bool Cancel Parameter kannst du das drucken nach gut Düngen einfach abbrechen.

N
NeueWelt Themenstarter:in
54 Beiträge seit 2011
vor 11 Jahren

Danke Sebastian,

In dem Fall ist der Thread glaube ich nötig, oder man nimmt nen Timer.
Hab aber grade gelesen dass diese Methode mit den commandbars nur bis Office 2003 funktioniert(angeblich).

Du vermutest richtig mit startFromScratch, eben RibbonXML.

kannst du mir vll bei dem BeforePrint ereignis unter die Arme greifen, das Beispiel ist für Excel und ich schaffe es nicht auf Word umzuschreiben.

private void WorkbookBeforePrint()
        {
            this.BeforePrint += Word.ApplicationEvents_BeforePrint (ThisApplication_BeforePrint); //Hier was falsch
            
        }

       
        void ThisApplication_BeforePrint(bool Cancel)
        {
            if (DialogResult.No == MessageBox.Show("Are you sure " +
                "you want to print the workbook?",
                "Example", MessageBoxButtons.YesNo))
            {
                Cancel = true;
                MessageBox.Show("Print is canceled.");
            }
        }

bei dem += in der Zeile, fehlt ein Assemblyverweis sagt die Fehlerliste, was müsste da hin?

mir fehlt das deklarieren des Events aber wohin?
public event ApplicationEvents_BeforePrint BeforePrint;

mfg

N
NeueWelt Themenstarter:in
54 Beiträge seit 2011
vor 11 Jahren

Nach Intensiven suchen doch gefunden:

Application.DocumentBeforePrint += new Word.ApplicationEvents4_DocumentBeforePrintEventHandler(Application_DocumentBeforePrint); //in Startup

  void Application_DocumentBeforePrint(Word.Document Doc, ref bool Cancel)
        {
            if (MessageBox.Show("Do you want to print?", "DocumentBeforPrint", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                Cancel = true;
            }
        }


mfg