Ole Automation - Menüpunkt "save as" etc aktivieren, wie?

mo84

Grünschnabel
Hi,

ich habe Excel in Java eingebettet - funktioniert auch alles. Aber die "Standart-Menüpunkte" "neu, öffnen, speichern, drucken, seitenansicht" sind sichtbar, aber deaktiviert (grau). Gibt es eine Möglichkeit zumindest "Speichern/ Speichern unter" zu aktivieren? Oder geht das nur über ein "SWT-Menü" was darüber liegt?

Gruß,

mo


PS:

http://www.tutorials.de/forum/java/176278-excel-mit-java.html

hier kann man gut sehen was ich meine :)
 
Moi moi,

erstmal tut mir leid, das ich diesen alten Thread hier ausgrabe, aber bin derzeit genau an dem selben Problem am verzweifeln.

Habe in meinem java Tool ebenfalls Word eingebunden über die ole Schnittstelle.

zwar konnte die oben genannten Befehle (new, save...) über die ole clientSite funktionen implementieren, jedoch finde ich keinen Weg die icons zu aktivieren.

Bzw. suche ich nach einem weg, einzelne Befehle ( z.b. Drucken, Rechtschreibprüfung....) zu aktivieren oder zu deaktivieren.

Gibt es dazu überhaupt eine Java seitige Lösung?

Vielen Dank im Vorraus, hoffe jemand kann mir hier weiterhelfen.

Anbei mein Code:

Code:
import java.io.File;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;

public class OleWordExample {

    private final Display display = new Display();
    private Shell shell = new Shell(display);
    private OleClientSite clientSite;
    private OleFrame frame;
    private String path = "";

    public OleWordExample() {
        shell.setSize(1024, 768);
        shell.setText("Word Example");
        shell.setLayout(new FillLayout());
    }

    private void createOleFrame() {

        try {
            frame = new OleFrame(shell, SWT.NONE);
            addMenu();
            createClientSite("Word.Document");

            OleAutomation oleAutomation = new OleAutomation(clientSite);

        } catch (SWTError e) {
            System.out.println("Unable to open activeX control");
            display.dispose();
            return;
        }

        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }

        display.dispose();
    }

    private void addMenu() {

        Menu menuBar = shell.getMenuBar();
        if (menuBar == null) {
            menuBar = new Menu(shell, SWT.BAR);
            shell.setMenuBar(menuBar);
        }

        MenuItem fileMenu = new MenuItem(menuBar, SWT.CASCADE);
        fileMenu.setText("&File");
        Menu menuFile = new Menu(fileMenu);
        fileMenu.setMenu(menuFile);
        frame.setFileMenus(new MenuItem[] { fileMenu });

        // Work
        MenuItem menuFileNew = new MenuItem(menuFile, SWT.CASCADE);
        menuFileNew.setText("New");
        menuFileNew.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(final SelectionEvent e) {
                newFile("new");
            }
        });

        // work
        MenuItem menuFileOpen = new MenuItem(menuFile, SWT.CASCADE);
        menuFileOpen.setEnabled(false);
        menuFileOpen.setText("Open...");
        menuFileOpen.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(final SelectionEvent e) {
                newFile("open");
            }
        });

        // work
        MenuItem menuFileSave = new MenuItem(menuFile, SWT.CASCADE);
        menuFileSave.setText("Save");
        menuFileSave.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(final SelectionEvent e) {
                saveFile();
            }
        });

        // work
        MenuItem menuFileSaveAs = new MenuItem(menuFile, SWT.CASCADE);
        menuFileSaveAs.setText("Save As");
        menuFileSaveAs.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(final SelectionEvent e) {
                saveAsFile();
            }
        });

        // work
        MenuItem menuFileExit = new MenuItem(menuFile, SWT.CASCADE);
        menuFileExit.setText("Exit");
        menuFileExit.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(final SelectionEvent e) {
                shell.dispose();
            }
        });
    }

    private void newFile(String command) {

        if (clientSite.isDirty()) {
            MessageBox messageBox = new MessageBox(clientSite.getShell(),
                    SWT.YES | SWT.NO | SWT.CANCEL);
            messageBox.setMessage("Would you like to save the changes");
            int answer = messageBox.open();

            switch (answer) {
            case 64:
                saveFile();
                fileOpen(command);
                break;
            case 128:
                fileOpen(command);
                break;
            default:
                break;
            }
        } else {
            fileOpen(command);
        }
    }

    private void createClientSite(final String fileName) {
        if (clientSite != null) {
            clientSite.dispose();
        }

        if (fileName == "Word.Document") {
            clientSite = new OleClientSite(frame, SWT.NONE, fileName);
        } else {
            clientSite = new OleClientSite(frame, SWT.NONE, new File(fileName));
        }

        clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);

    }

    private void fileOpen(String file) {

        if (file == "new") {
            path = "";
            createClientSite("Word.Document");
        } else {
            FileDialog dialog = new FileDialog(clientSite.getShell(), SWT.OPEN);
            dialog.setFilterExtensions(new String[] { "*.doc", "*.docx" });
            String fileName = dialog.open();
            if (fileName != null) {
                path = fileName;
                createClientSite(fileName);
            }
        }
    }

    private void saveFile() {

        if (path == "") {
            saveAsFile();
        } else {
            clientSite.save(new File(path), true);
        }

    }

    private void saveAsFile() {
        FileDialog dialog = new FileDialog(clientSite.getShell(), SWT.SAVE);
        dialog.setFilterExtensions(new String[] { "*.doc", "*.docx" });
        final String savePath = dialog.open();

        if (savePath != null) {
            path = savePath;
            clientSite.save(new File(path), true);
        }
    }

    public static void main(final String[] args) {
        OleWordExample example = new OleWordExample();
        example.createOleFrame();
    }

}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück