Seite 1 von 1
FileControl Steuerelement
Verfasst: Do, 18.11.2004 06:03
von Wolf
Hallo,
Wer hat eine Idee, wie man das FileControl-Steuerelement initialisieren muß, damit es nicht als "Öffnen"-Funktion wirkt, sondern als "Save as" oder "speichern als...".
Rufe ich das FileControl-Steuerelement auf, kann ich Dateien auswählen, die vorhanden sind, und das Element gibt mir auch den Dateinamen zurück, will ich aber einen Dateinamen angeben, der noch nicht existiert, kommt eine Fehlermeldung gleich im Dateiauswahlfenster, dass die Datei nicht existiert. Dies ist aber gewollt (dass die Datei nicht existiert), denn ich will ja Daten mittels
aus dem Dokument in eine einfache Textdatei Speichern.
Bitte helft !!!!
Gruß Wolf
Verfasst: Do, 18.11.2004 08:05
von Charly
Hallo!
Ich muss vorausschicken: ich weiß es nicht, ob man mit einem FileControl eine Datei erzeugen kann. Mir ist der Open-Befehl auch nur bekannt für vorhandene Dateien. Vielleicht weiß jemand anders dafür eine Lösung.
Ich persönlich würde allerdings anders vorgehen. Ich würde per Makro ein leeres Writer-Dokument erzeugen. Dann würde ich von meinem Dokument die gewünschten Teile ins neue Dokument kopieren und dieses dann als Textdatei speichern und anschließend schließen.
Gruß
Charly
Verfasst: Do, 18.11.2004 08:39
von Toxitom
Hallo Wolf,
Charly hat dir schon den richtigen Hinweis gegeben: Das File-Controll Steuerelement kann selbst keine eigene Dateien erzeugen! Wenn du also etwas "Neues" speichern möchtest, so kannst du natürlich einen eigene Eingabebox für den Namen verwenden, oder du nutzt den File-Control Dialog, fängst den Fehler ab, liest im Fehlerfall den eingegebenen Namen aus und erzeugst die Datei. Lässt sich mit einfachen Schleifen/Verzweigungen lösen.
Viele Grüße
Thomas
Filepicker
Verfasst: Do, 18.11.2004 21:36
von moritz
Hilft Dir der Hinweis "Filepicker" schon weiter oder soll ich Dir mehr dazu heraussuchen? Damit funktioniert das Speichern von Dateien wie gewohnt mit dem entsprechenden Dialogformular.
Moritz
Re: Filepicker
Verfasst: Fr, 19.11.2004 05:36
von Wolf
[quote="moritz"]Hilft Dir der Hinweis "Filepicker" schon weiter oder soll ich Dir mehr dazu heraussuchen? Damit funktioniert das Speichern von Dateien wie gewohnt mit dem entsprechenden Dialogformular.
Moritz[/quote]
Hallo Moritz,
Wäre nicht schlecht. Filepicker sagt mir zu Zeit noch nichts.
Danke
Verfasst: Fr, 19.11.2004 16:16
von Charly
Hallo!
mit dem FilePicker kannst du einen Dialog erzeugen zum Öffnen und speichern von Dateien, so als würdest du über das Menü den Punkt "Speichern unter" aufrufen. Es gibt dazu schon mehrere Threads.
zum Beispiel
viewtopic.php?t=1897.
Ob dieser Dialog für deine Zwecke notwendig ist weiß ich nicht. Ich habe für dich einen Code geschrieben, der eine leere Textdatei erzeugt. Den Namen und Pfad mußt du allerdings per Inputbox eingeben. Falls das dem Makro fest hinterlegt werden kann, entfällt natürlich die Eingabe.
Code: Alles auswählen
Sub Textdateierzeugen()
HaupDok = ThisComponent
Frage = "Geben Sie Pfad und Namen der Textdatei" + chr(13)
Frage = Frage + "mit dem Format z.B. C:\Testordner\Textdatei.txt ein"
Datei = inputbox(Frage)
if not fileexists(Datei) then
dim Dummy()
dim document as object
dim dispatcher as object
dim args1(1) as new com.sun.star.beans.PropertyValue
dim Url as string
HilfsDok = Stardesktop.loadComponentFromUrl _("private:factory/swriter","_blank",0,Dummy())
document = Hilfsdok.currentController.frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Url = ConvertToUrl(Datei)
args1(0).Name = "URL"
args1(0).Value = Url
args1(1).Name = "FilterName"
args1(1).Value = "Text"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
HilfsDok.close(false)
else
MsgBox("Datei schon vorhanden")
end if
End Sub
gruß
Charly
Verfasst: Fr, 19.11.2004 19:54
von Wolf
Hallo Charly,
Jetzt weiß ich wo der Haase lang läuft, aber das ist nicht was ich meine.
Das "filecontrol" Steuerelement erzeugt weder Dateien, noch öffnet es welche. Es stellt nur in einem Dialogfenster die Verzeichnis- und Dateistruktur überschaubar dar und liefert nach dem Betätigen des "Öffnen"-Button den Pfad/Dateinamen als String zurück.
In diesem Dialog kann man sogar Verzeichnisse erzeugen. Nun macht das Erzeugen von Verzeichnissen nur Sinn, wenn ich da was hinein schreibe. Das soll der Dialog aber nicht tun. Er soll nur einen Dateinamen mit dem entsprechenden Pfad zufückgeben.
Existiert eine Datei, dann wird der Pfad/Dateiname in einem String nach dem Schließen des Dialogs mit dem "Öffnen"-Button wie folgt zurückgegeben
Code: Alles auswählen
Dim Dateiname as String
Dim dlgDateiName as Object
dlgDateiName=Dlg.getControl("FileControl")
Dateiname=dlgDateiName.GetText()
Das ist alles. Was ich damit dann mache ist ein anderes Thema.
Gebe ich aber in die Eingabezeile des Dialoges einen Dateinamen ein der noch nicht existiert, dann erscheint bereits im Dialog eine Fehlermeldung, die ich nicht beeinflussen kann.
Ich will nur in diesem übersichtlichen Dialog mir ein Verzeichnis meiner Wahl auswählen (oder ein Neues erstellen, was ja funktioniert) und dann einen Dateinamen ins Eingabefeld schreiben.
Dann "OK" drücken und ich möchte zum Beispiel den String:
"c:\Eigene Dateien\Dokumente\neuer_text.txt"
erhalten. (neuer_text.txt hätte ich dann zum Beispiel in das Textfeld für den Dateinamen eingegeben.)
Ich habe eben keinen Bock den gesamten Pfad in einer Inputbox per Hand einzutippen. Wozu gibt es denn diesen filecontrol-Dialog. Ich muß dieses Ding nur dazu bringen die Fehlermeldung zu unterlassen und mir einfach diesen String zurückzugeben, so wie es passiert wenn deine Datei existiert.
Wohl gemerkt, das FileControl Steuerelement ist nur ein AUSWAHLFENSTER oder ein AUSWAHLDIALOG. Es öffnet keine Dateien, es erstellt keine Dateien es gibt nach dem Schließen des Dialogs eigentlich nur einen String zurück, mit dem ich dann hantieren kann.
Wolf
Verfasst: Sa, 20.11.2004 16:23
von Charly
Hallo!
Ich habe dein Problem vollkommen falsch verstanden. Ich bin davon ausgegangen, dein Makro weiß den vollständigen Pfad und Dateinamen und mein Inputbefehl war nur eine Krücke für meinen Codeteil.
Wenn du ein Auswahlfenster brauchst, solltest du dich doch mit dem Filepicker beschäftigen und dir den von mir im obigen Beitrag genannten Thread anschauen.
Ich habe ihn mir jetzt selbst genauer angeschauen und getestet. Man erhält ein Auswahlfenster wie beim "Speichern unter" und kann sogar einen neuen Dateinamen eingeben. Das drücken auf Speichern bewirkt jedoch nichts, schließt nur den Dialog ab. Mit dem Makro kann man jedoch dann die zuletzt eingestellten Daten abfragen. Für das Speichern muss man dann eine eigene Routine mit den abgefragten Daten schreiben.
Den Dateinamen mit Pfad erhält man jedoch in Url-Form. Dies müsste man gegebenenfalls mit dem Befehl: ConvertFromUrl umwandeln.
Im folgenden mein Testprogramm:
Code: Alles auswählen
Sub Speicherdialog()
dim ok
dim datei
dim filter as string
dim Dialogtyp(0)
doc= thisComponent
DateiDialog = createunoservice("com.sun.star.ui.dialogs.FilePicker")
Dialogtyp(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
DateiDialog.initialize(DialogTyp())
DateiDialog.appendFilter("Textdateien(txt)",".txt")
ok = DateiDialog.execute
if ok = 1 then
datei = Dateidialog.getFiles()
filter = dateidialog.CurrentFilter
msgbox filter
Url = Datei(0)
msgbox url
end if
end sub
Gruß
Charly
Verfasst: Sa, 20.11.2004 19:35
von Wolf
Danke Charly,
Das ist es !!! Klappt vom Feinsten !
Wo hast Du diese Infos her ? Gibt es irgendwo 'ne Dok. dafür?
Danke
Wolf
Verfasst: Sa, 20.11.2004 22:23
von Charly
Hallo!
Wo hast Du diese Infos her ? Gibt es irgendwo 'ne Dok. dafür?
Diese Informationen habe ich teilweise durch die Dokumentation StarBasic FAQ von Michael Dannenhöfer , das Programmierhandbuch von SUN und durch dieses Forum erhalten. Links dafür stehen an erster Stelle im Basic-Forum unter "sehr wichtig".
Noch ein Tip für den FilePicker. Im Auswahlfenster kann man nur Dateien sehen für die man Filter bereit gestellt hat.
Der Filter für "alle Dateien" lautet:
Das habe ich gerade erst herausgefunden.
Gruß
Charly
Verfasst: So, 21.11.2004 06:38
von Wolf
Hallo Charly,
Danke auch für den Tip mit dem Filter. Ich werde mir mal die Links im Forum genauer betrachten.
Tschüß
Wolf