10-27-2020 11:01 AM - edited 10-27-2020 11:24 AM
Hallo alle!
Jetzt war es lange ruhig im User Group München - ich hoffe es geht allen gut.
Ich habe ein Problemchen, und wollte fragen, falls wer von euch eine gute Lösung dazu hat:
Ich verwende eine eigene VI von User.lib in meinem Projekt. Es ist eine Hilfe-VI, die kontextbezogen mein Hilfe-Dokument (Hilfe.pdf) auf die richtige Seite mit Acrobat Reader aufschlägt wenn der Befehl aus unterschiedliche Kontexte in meinem Programm abgesetzt wird. (z.B. Hilfe zu "Settings": Seite 4 aufschlagen, Hilfe zu "Prüfung starten": Seite 14 aufschlagen...) ihr checkt es schon. Eingänge in der VI sind Pfad zur Acrobat Reader, Pfad zur Hilfedatei und eben gewünschte Seitennummer im pdf-Dokument. Der Aufruf selber erfolgt über die Console.
Das ganze ist (leider) statisch aufgebaut. Es wird 1x festgelegt, auf welcher Seite die "Settings"-Hilfe sich befindet und danach nicht mehr geändert. Je nach dem, auf wie viele Stellen in der Anwendung ich ein Hilfe-Button einbaue, so oft muss ich auch eventuelle Korrekturen im Code vornehmen, wenn ich z.B. das pdf-Dokument verändere (der gesuchte Hilfe-Abschnitt rutscht z.B. eine Seite vor oder zurück je nach korrekturmaßnahme).
Meine Frage an euch ist jetzt , ob ihr mir verraten könntet, wie ich programmatisch abfragen kann, von welchen Dialog-VIs in meinem Projekt meine eingebaute user.lib-VI aufgerufen wird. Das Ziel ist natürlich, dass ich mit diesem Aufruf 1x in der Entwicklungsphase eine Array machen kann (Caller: Seite im Hilfe-Dokument), das wunderbar in der ini-Datei gespeichert werden kann und also auch jederzeit im Nachhinein angepasst werden kann.
Ich habe vor Jahren versucht, mit Bookmarks im Dokument zur richtigen Punkt im Dokument zu kommen, aber das ging immer in die Hose. Mit dem Seitenverweis läuft es eigentlich sehr gut, bloß bei Veränderungen ist es a bissl mühsam.
So, genug gelabert - falls wer einen guten Link oder eine gute Idée hat, dann würde ich mich freuen, wenn ihr es mir mitteilen würdet.
Vielen Dank im Voraus und bis denne!
/Martin
*******Ergänzung*****
Ok, ich habe es selber gefunden... Statische VI-Ref, Eigenschaft:Callers UND das Main.vi vorher öffnen, damit sich alle Callers auch in dem Speicher geladen haben. Ich habe mich so gewundert, warum ich die ganze Zeit nur ein 0-Array zurückbekommen habe - deshalb habe ich euch geschrieben. Mit Main.vi im Speicher, da habe ich alle Callers brav aufgelistet bekommen (es waren 7 Stück...) Trotzdem danke und nicht desto trotz ist es ja auch nicht schlecht, wenn sich was in der Gruppe tut, oder?
/Martin
10-27-2020 11:36 AM
Hi Martin,
ich hab evtl. das Problem nicht verstanden, versuche aber mal eine Antwort zu geben.
Was Du ja, wenn ich Dich richtig verstehe, schon machst ist, in einer Tabelle "Aufrufer"<->"Pfad bzw. Seite im PDF" zuzuordnen. Wenn Du jetzt an verschiedenen Stellen den jeweiligen Aufrufer identifizieren möchtest, dann über eine enum-Konstante oder über eine String-Konstante. Mit einem bestimmten LV-Bookmark ("#<text>") könnte man alle diese Stellen im Blockdiagramm zusätzlich markieren. Wenn sich nun Seitenzahlen im PDF ändern, wird das in der Tabelle angepasst, der Code für den Aufruf bleibt derselbe ... Die Tabelle könnte ein Text-File sein. Der Eingang zu Deinem subVI ist dann nicht der Pfad im PDF, sondern ein Schlüssel/ein Wert einer Konstante, mit dem Du dann in einer Tabelle nachschaust, in der die Zuordnung Schlüssel<-> PDF-Seite steht.
Weiss nicht, ob das Dein Problem löst, bzw. ob ich das Problem überhaupt verstanden habe. Falls nicht: Was genau möchtest Du machen? Was gelingt Dir nicht?
VG
Andreas
10-27-2020 11:37 AM
ah, ich sehe grad, Du hast die Antwort schon gefunden ...
10-28-2020 04:52 AM
Hallo Andreas,
danke für die schnelle Antwort.
Ja, ich habe es selber schon herausgefunden. Ich wollte für die ini-datei 1x eine Art Look up-Tabelle erstellen, damit ich im Projekt herausfinden kann wo meine Hilfe-VI überhaupt eingesetzt wird. Wenn ich die Tabelle im System danach habe, kann ich bei jedem Aufruf meiner Hilfe-VI (Bei jedem Hilfeknopfdruck, egal wo im Programmcode) über eine lokale Abfrage den Vergleich mit der Tabelle machen und die richtige Seitenummer mitgeben.
Nicht desto trotz - schön, das so schnell reagiert wurde. Dein Idée mit dem LV-Bookmark ist eine ganz andere Einfallswinkel zur Lösung, ich verstehe wie du es meinst. Daran habe ich so nicht gedacht, werde es aber ausprobieren die mal programmatisch abzufragen. Wäre auch eine sehr schöne Lösung. Vielleicht falle ich in einem anderen Zusammenhang darauf zurück. Danke dafür!
/Martin
10-28-2020 04:59 AM
Noch ein anderer Blickwinkel: PDF-Dateien unterstützen m.W. auch Bookmarks.
Ich selbst habe das noch nicht ausprobiert, denke aber, dass es möglich sein sollte, dem AdobeReader zu sagen, dass er in einer Datei zu einem bestimmten Bookmark springen soll (anstelle einer Seitenzahl).
Damit bräuchtest Du bei Änderungen der Doku keine Änderung im Programm mehr - klingt für mich auf Dauer weniger Aufwändig, wenn man das Konzept einmal implementiert hat.
10-28-2020 05:44 AM
Ja, das stimmt (angeblich). Ich habe aber vor zwei Jahren von dir den Supertip dazu bekommen
https://forums.ni.com/ni/board/message?board.id=grp-10915&message.id=87#M87
und darauf habe ich dieses Herangehensweise gewählt. Zuerst habe ich verzweifelt mit den Bookmarks versucht, aber der Übergang von Word-Bookmark zu korrekt zugeordnete pdf-Bookmarks die von LabVIEW wiederum angesprochen und ausgelesen werden können hat so was von gar nicht funktioniert.
Der Begriff Bookmark war vielleicht der springenden Punkt. Ich vermute stark, dass jedes Software was anderes darunter verstanden hat und das ich deshalb da so nicht so gut vorankommen könnte.
Falls es nur ungeschickt von mir war, weiß ich nicht. Ev. hat wer eine fertige Lösung mit funktionierende Beispiele, da bin ich wie immer sehr interessiert, aber sonst läuft die Seitenlösung auch gut.
Nichtdestotrotz war deine pdf-Hinweise sehr hilfreich, da ich mit der Seitenangabe auch ziemlich gut fahre. Und jetzt mit den Callers… Mmmmhhh, a Schmankerl!
/Martin