SoftMaker.de

Deutschsprachiges Diskussionsforum
Aktuelle Zeit: 20.06.2013 07:49:13

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Vorschlag für ein neues Feature
BeitragVerfasst: 01.04.2012 14:03:45 
Offline

Registriert: 14.01.2011 16:25:26
Beiträge: 21
Hallo,

es wäre schön, einen Button zu haben, der mir den Explorer für das Verzeichnis öffnet, auf das sich das jeweils gerade aktuelle Tab/Dokument bezieht. Wenn das mit Basicmaker ginge wäre es für mich auch ein gangbarer Weg, gibt es dafür ein Beispiel?

Mit besten Grüßen
Yogi


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 01.04.2012 21:30:45 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1484
Grundsätzlich sollte das gehen. Mit activedocument.path lässt sich der Pfad (Ordner), in dem das aktive Dokument liegt, ermitteln. Nun muss man nur noch den Aufruf des Explorers hinkriegen. Dafür habe ich bisher aber keine Lösung gefunden. Vergeblich habe ich nach den Objekteigenschaften des Explorers gesucht. Kennt jemand zufällig diese? Dann liesse sich das nämlich ziemlich sicher hinbekommen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 02.04.2012 16:49:38 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1484
Nach erneutem Suchen habe ich die nötigen Angaben gefunden und ein Skript gebastelt, das ein explorer-artiges Fenster mit dem Ordner, in dem das aktuelle Dokument in TM liegt, öffnet. Da anderswo im Forum bereits mehrfach erklärt ist, wie man daraus einen Button in TM anlegt, wiederhole ich dies hier nicht.

Code:
REM Versuch Explorer mit aktuellem Dokument öffnen
Set tm = CreateObject("TextMaker.Application")
tm.Application.Visible = True
Set sl = CreateObject("Shell.Application")
pfad = tm.ActiveDocument.path
sl.Explore pfad
Set tm = Nothing
Set sl = Nothing
End


Um Rückmeldung wird gebeten!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 02.04.2012 17:55:48 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 27.08.2008 21:05:27
Beiträge: 250
Wohnort: Wiesbaden
Hallo Yogi, hallo Panosis!
Skript hat bei mir Nichts bewirkt außer einem "erfolgreich beendet". Keine Ahnung warum.

Bei mir funktioniert aber ein simples:
Code:
' Versuch Explorer mit aktuellem Dokument zu öffnen
Option Explicit
Sub Main ()
   Dim tm as Object, pfad as String, x as Integer
   Set tm = CreateObject("TextMaker.Application")
   tm.Application.Visible = True
   pfad = tm.ActiveDocument.path
   x = shell("explorer.exe " & pfad, 1)
   Set tm = Nothing
End Sub


Ein shell() mit "%SystemRoot%\explorer.exe ", oder "explorer.exe /e " (für Ordnerleiste), wie in Windows XP Verknüpfungen, klappt jedoch nicht. Auch da bleibe ich - freiwillig - blass 8-)

PS: keine schlechte Idee so ein Skript...

_________________
SMO rev. 670 + Win XP                    Times without money are better than times without Mini - the original ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 02.04.2012 22:18:24 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1484
Nun, die Blässe ist nicht nötig: Über den Befehl shell sollte eigentlich kein DOS-artiger Aufruf möglich sein, jedenfalls gemäss dem Handbuch nicht. Dafür gibt es wenn schon andere Wege. Ich bin eher erstaunt, dass der Aufruf mit Pfad-Parameter überhaupt funktioniert.
Umgekehrt bin ich aber erstaunt, dass der Aufruf als Objekt nicht funktioniert, der eigentlich der "offizielle" Weg ist und der bei mir bisher beim Testen durchwegs immer gelang (wie es eigentlich zu sein hätte).
Wurde denn das Skript 1:1 übernommen oder irgendwie abgeändert?
Diese Nachfrage nur zur Sicherheit, um etwaige andere Fehlerquellen auszuschliessen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 03.04.2012 21:10:29 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 27.08.2008 21:05:27
Beiträge: 250
Wohnort: Wiesbaden
Hurra!
Nochmal Deins 1:1 getestet. Es funktioniert einwandfrei, sogar mit Ordnerleiste, aber nur wenn im Basicmaker gestartet.

Wenn ich es 1:1 als _temp.bas speichere und über _temp.ico oder über Weiteres/Skript starten in TM aufrufe, entsteht ein compile error: syntax Fehler in der letzten Zeile End.

Zuvor war Dein Skript bei mir sowohl über das Icon gestartet als auch im Basicmaker direkt "erfolgreich beendet" obwohl kein Explorer erschien. Meine _temp.bas - Vorlage enthält ein Option Explicit, Sub Main, End Sub und einige Funktionen, die drastisch fehlende Teile der Objektstruktur zu ersetzen versuchen. Da hinein habe ich Dein Skript verpflanzt und musste zumindest ein Paar DIMs eintragen, weiß nicht mehr was noch evtl..

_________________
SMO rev. 670 + Win XP                    Times without money are better than times without Mini - the original ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 03.04.2012 21:23:28 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1484
Ob die Option explicit funktioniert, weiss ich nicht, da zumindest in der MS-Dokumentation (die allerdings für VSH gedacht ist, aber die eigentliche Objektstruktur bleibt ja gleich) der Typ des Ordner-Pfades als "variant" definiert ist. Das müsste man vielleicht ausprobieren.
Warum das "End" stört, weiss ich nicht. Ob da noch ein Würmchen schlummert?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 03.04.2012 21:27:46 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 27.08.2008 21:05:27
Beiträge: 250
Wohnort: Wiesbaden
Seltsam!
Dein Skript funktioniert auch als .bas Datei und über ein Symbol von TM aus gestartet, wenn es sozusagen 1:1 zwischen Sub und End Sub gepackt OHNE ein Option Explicit):
Code:
Sub Main ()
REM Versuch Explorer mit aktuellem Dokument öffnen
Set tm = CreateObject("TextMaker.Application")
tm.Application.Visible = True
Set sl = CreateObject("Shell.Application")
pfad = tm.ActiveDocument.path
sl.Explore pfad
Set tm = Nothing
Set sl = Nothing
End Sub


Wenn ich aber NUR(!) diese 3 Zeilen anfangs einfüge, wird wieder ohne Ergebnis "erfolgreich beendet":
Dim tm as Object
Dim sl as Object
Dim pfad as String

Ich bleibe doch blaß! :lol:

_________________
SMO rev. 670 + Win XP                    Times without money are better than times without Mini - the original ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 03.04.2012 21:30:42 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1484
Na ja, wenn es denn nur mal funktioniert!

Aber es scheint doch, dass mit der Typ-Deklaration etwas schief läuft.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 03.04.2012 21:36:10 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 27.08.2008 21:05:27
Beiträge: 250
Wohnort: Wiesbaden
Oh, Du bist ja Online \:D/

Aha, "pfad" ist also ein Variant! Da lag also der Haken.

So funktioniert es auch als Datei, mit Option Explicit und allen DIMs:
Code:
Option Explicit
Sub Main ()
REM Versuch Explorer mit aktuellem Dokument öffnen
Dim tm as Object
Dim sl as Object
Dim pfad as Variant
Set tm = CreateObject("TextMaker.Application")
tm.Application.Visible = True
Set sl = CreateObject("Shell.Application")
pfad = tm.ActiveDocument.path
sl.Explore pfad
Set tm = Nothing
Set sl = Nothing
End Sub


Perfekt! Jetzt muss ich nur noch den Aufruf über OLE lernen. Wo steht den so etwas, und was ist VSH?

_________________
SMO rev. 670 + Win XP                    Times without money are better than times without Mini - the original ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 03.04.2012 22:00:40 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 27.08.2008 21:05:27
Beiträge: 250
Wohnort: Wiesbaden
Panosis hat geschrieben:
Warum das "End" stört, weiss ich nicht. Ob da noch ein Würmchen schlummert?

Hab es noch einmal ohne Sub Main () und mit End und mit Stop probiert. In allen Fällen geht jetzt der Explorer doch auf, aber darunter verbirgt sich ein Fenster "Programausführung wird wegen Fehlern abgebrochen". Ich glaube eine .bas - Datei verlangt anfangs ein Sub Name () und ein End Sub am Ende. Letzteres muss auch nach einem Stop vorhanden sein.

_________________
SMO rev. 670 + Win XP                    Times without money are better than times without Mini - the original ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 03.04.2012 22:03:01 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1484
Also, VSH = Visual BASIC Scripting Host, das ist eine abgespeckte Variante von Visual BASIC von MS für Windows, eben eine nur-Skript-Sprache, die in den neueren Windows-Versionen inbegriffen ist. (Unter W95 musste man sich VSH wohl noch herunterladen und selbst installieren, in neueren Versionen sollte VSH dabei sein.) Wenn einfach vom "Windows Scripting Host" oder "Scripting Host" die Rede ist, ist meist VSH gemeint - obwohl z. B. BM auch ein Scripting Host ist.

Die Bezeichnung OLE ist in diesem Zusammenhang nicht ganz richtig, im Grunde geht es um den objektorientierten Aufruf von "Objekten" - das kann alles Mögliche sein, Programme, Komponenten des Systems, DLLs usw. Sind diese unter Windows installiert, so stellen sie standardisierte Aufrufe zur Verfügung, über die Daten ausgetauscht werden können, aber auch Befehle und Anweisungen. Im Prinzip ist dies eine geniale Sache: Statt in jeder Anwendung dieselben Probleme immer wieder neu zu lösen, delegiert man sie einfach an ein "Objekt", das die Lösung bereits implementiert hat. Z. B. kann man auf einem Windows-System den Zeilenumbruch eines Textes mittels objektorientiertem Aufruf einfach an das Objekt Word.Application weiterleiten, dann bekommt man den Text umgebrochen zurück. Daran sieht man aber gleich auch, wo das Problem liegt: Auf verschiedenen Systemen gibt es verschiedene Objekte, wenn man also etwa statt Word SMO installiert hat, geht der erwähnte Aufruf natürlich ins Leere.

Ein Aufruf erfolgt folgendermassen: Man muss zuerst eine Verbindung zu einem Objekt herstellen. Dies erfolgt in BM mittels Set xy = Create.Object ("Name.Typ"). Dabei tritt schon zum ersten Mal die "Punktnotation" auf: Bei objektorientierten Aufrufen werden die einzelnen Teile mittels Punkten getrennt, aber ansonsten zusammen geschrieben. Beim Aufruf eines Objekts muss der Typ genannt werden, das ist bei Anwendungen in aller Regel Application, also etwa Shell.Application oder TextMaker.Application.
Wenn man mit Create.Object eine Verbindung hergestellt hat, dann kann man über die zugewiesene Variable (im Beispiel xy) alle Komponenten dieses Objekts ansprechen, also etwa so: xy.Methode.Aktion. In unserem Script etwa ist das aufzurufende Objekt die Shell vom Typ Application, also Shell.Application. Da wir dem Objekt die Variable sl zugewiesen haben, muss man nun aber nicht etwa schreiben: Shell.Methode oder: sl.Shell.Methode, sondern sl ersetzt "Shell", also: sl.Explorer. Ebenso tm statt TextMaker.
Nun unterscheidet man bei Objekten Methoden und Eigenschaften. Eine Methode ist immer irgendwie mit einer Aktion verbunden, entspricht also dem klassischen Befehl bzw. der Anweisung. Hinzu können Argumente bzw. Optionen kommen. In unserem Script ist eine Methode "Explore", sprich: öffne ein Explorer-Fenster. Diese Methode gehört zum Objekt Shell, das wir unter der Variable sl ansprechen, also lautet der Aufruf: sl.Explore. Als Argument müssen wir nun noch den Pfad angeben, dem wir die Variable pfad zugeordnet hatten.
In unserem Script kommt auch ein Aufruf mit einer Eigenschaft vor: tm.ActiveDocument.path ist ein solcher Aufruf, denn tm steht für das Objekt TextMaker, darin gibt es die Sammlung von Eigenschaften namens ActiveDocument, und darin enthalten ist die Eigenschaft path, auf die wir es abgesehen haben. Da nun dieser Aufruf eigentlich in einer Information besteht, da man sagen könnte, tm.ActiveDocument.path stelle diese Information symbolisch dar, so müssen wir, damit wir diese auch auslesen können, einer Variable zuweisen. (Alternativ könnte man auch versuchen: sl.Explore tm.ActiveDocument.path - ich bin aber eher gegen solche Schreibweisen.) Umgekehrt kann es auch vorkommen, dass man einem Objekt eine Eigenschaft zuweisen möchte. Das ist etwa der Fall bei tm.Application.Visible = true, wobei gleichsam die linke und rechte Seite getauscht werden.

Soweit mal ein Crashkurs in Objektaufrufen. Das Dumme an der Sache ist, dass jedes Objekt unter einem bestimmten Namen aufgerufen werden muss, dass seine Methoden und Eigenschaften bestimmte Aufrufnamen tragen und dass es eben auch noch bestimmte Formalitäten für die Argumente gibt. Dazu braucht man Referenzen. Anders gesagt: Damit man mit Objekten etwas anfangen kann, muss man alles Nötige über sie wissen.

Nun, bei Shell.Explore pfad hat sich ja inzwischen gezeigt, dass es eben wirklich so ist, dass nur der Typ Variant akzeptiert wird, nicht aber etwa String o. dgl. Damit haben wir den "Übeltäter" in diesem Fall also identifiziert. Unter VSH ist es ja auch so, dass grundsätzlich einfach losgelegt werden kann, ohne auf Typen zu achten. Das ist (vor allem auch für Anfänger) praktisch, hat aber auch Nachteile, gerade auch dann, wenn man, wie hier, mit expliziten Typbezeichnern arbeiten will. Im professionellen Visual BASIC ist das m. W. dann eben auch gerade nicht so.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 03.04.2012 22:03:11 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1484
Hm, ursprünglich war BM nach C-Vorbild strikte darauf ausgelegt, dass es ein SUB MAIN und dementsprechend ein ENDSUB geben musste. Seit einigen Versionen war das aber nicht mehr der Fall, jedenfalls war es möglich, Skripte auch einfach so anzulegen, ganz ohne SUB MAIN, SUB, END SUB oder auch END. Warum das beim Aufruf über Button nicht richtig geht, kann ich spontan auch nicht sagen.
Jedenfalls mag es als Tugend gelten, mit SUB MAIN und END SUB zu arbeiten. Und wenn es dann auch noch zuverlässig funktioniert, ist ja alles gut.
Ich fürchte aber, dass da doch noch ein winziges Würmchen schlummern könnte ...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 04.04.2012 00:07:42 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 27.08.2008 21:05:27
Beiträge: 250
Wohnort: Wiesbaden
WOW! Ich danke dir!
Auch wenn ich einiges wusste, hat der Crashkurs dank Deiner lebendig erklärenden und wunderbar untendenziösen Art zu schreiben meinen Horizont merklich erweitert. Vor allem was VSH betrifft. Ich habe nur von WSH gehört, womöglich das Gleiche (?), und aufgegeben dort einzusteigen mangels Erläuterungen, Beispielen und Zeit. Wie Du es aber Beschreibst entstehen bei mir simple Zusammenhänge zu Bekanntem und das mindert meine Unlust deutlich.

Nochmal vielen Dank!

Das winzige Würmchen aus dem zweiten Post ist vermutlich keines. Jedenfalls kann ich jetzt behaupten, dass Dein Skript OHNE den End Befehl fehlerlos funktioniert, auch als Datei und von TM aus gestartet. Also: Kein Sub, dann auch kein End. Eine Logik ist erkennbar. Der Fehler trat nach Öffnen-Befehl des Explorer auf und die Fehlermeldung wurde vom schließlich geöffneten Explorer verdeckt.

Kennst du "Cypress Enable Basic"?

_________________
SMO rev. 670 + Win XP                    Times without money are better than times without Mini - the original ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorschlag für ein neues Feature
BeitragVerfasst: 04.04.2012 09:11:35 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1484
Uppala, da spielte mir offenbar meine BASIC-Vergangenheit einen Streich. Also inskünftig keine ENDs mehr!

Ja, VSH = WSH, wenn ich mich nicht täusche, denn ursprünglich war wohl Visual BASIC zuerst, dann wurde es als Visual BASIC Script "abgespeckt", daraus wurde dann Windows Scripting mit dem Windows Scripting Host. Inzwischen gibt es ja noch so einiges mehr, u. a. die PowerShell, die "eigentlich" das noch aus DOS-Zeiten stammende Batch-Scripting ersetzen sollte, aber auch Objekte ansprechen kann und einiges mehr.

Im Grunde ist es ja gleichgültig, welches Scripting man verwendet, solange es eine Schnittstelle zum Objekt-System unter Windows gibt. BM stellt über CreateObject eine solche Schnittstelle zur Verfügung, und wenn man dann noch weiss, welche Objekte wie angesprochen werden können, dann kann man auch mit BM nahezu alles machen, was man mit anderen Scripting-Hosts machen kann. Da sehe ich eigentlich das grösste Problem, denn der Sprachumfang der meisten Scripting-Hosts ist vergleichsweise klein, hingegen benötigt man ausführliches Referenz-Material, um die vielen Objekte nutzen zu können.
Bspw. heisst eben das Explorer-Fenster im Objekt-System nicht Explorer.exe, sondern muss über "Shell.Application" aufgerufen werden, eine Datei-Auswahlbox ist im FileSystem zu finden usw. Das BM-Handbuch gibt ja wenigstens die Objekt-Strukturen der SMO-Komponenten an, womit man schon einiges anfangen kann. Aber eben - alles, was sonst so auf einem Windows-System herumschwimmt, muss anderweitig dokumentiert sein, damit man etwas damit anfangen kann.

Cypress Enable Basic kenne ich nicht, ich kenne so rund 50 BASIC-Dialekte und -Derivate, von denen ich mit rund 30 selbst programmiert habe, wovon vielleicht mit 10 eingehend. Vorsichtigen Schätzungen zufolge soll es aber mehrere hundert eigene Programmier- und Scripting-Sprachen mit dem Teil "BASIC" oder "Basic" im Namen geben.

Es gibt ja unter den Forums-Teilnehmenden auch einige Experten für andere Scripting-Sprachen, die alles, was wir im BM-Forum behandeln, mit ihrer jeweiligen Scripting-Sprache nachbauen - und das klappte immer vorzüglich. Die Frage stellt sich halt, ob man sich in eine oder einige wenige Systeme einarbeiten will und das dann gründlich oder ob man lieber eine ganze Reihe unterschiedlicher Systeme eher nur oberflächlich kennt, aber dann so, dass man mit allen von ihnen die wichtigsten und dringendsten Probleme lösen kann. Das hängt von den persönlichen Vorlieben und der jeweiligen Situation ab. Ich verstehe durchaus, wenn jemand nicht z. B. die ganze PowerShell durcharbeiten will, wenn vielleicht in zwei Jahren schon wieder ein neuer Nachfolger kommt.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de