Von einer Schaltfläche zu dem Text

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Jonny1
***
Beiträge: 55
Registriert: Mi, 12.01.2011 21:49

Von einer Schaltfläche zu dem Text

Beitrag von Jonny1 »

Ich habe auf einem Blatt folgendes vorbereitet:
2011-01-26_1828.png
2011-01-26_1828.png (3.87 KiB) 912 mal betrachtet
Schreiben will ich ein Makro, das beim Klicken der Schaltfläche ausgelöst wird und mit der Untersuchung der Zeichenfolge beim ersten Zeichen ("a") anfängt und vorführt, bis es das Nummerzeichen ("#") gefunden hat.

Kann mir jemand einen Tip geben, wie ich vorgehen soll?

Danke

Jonny
insertfunnyname
Beiträge: 5
Registriert: Di, 25.01.2011 16:04

Re: Von einer Schaltfläche zu dem Text

Beitrag von insertfunnyname »

Mahlzeit,

generell schon.

Am einfachsten ist die Funktion instr():

Code: Alles auswählen

dim deintext as string

deintext = "abcdefghij#klmno"

msgbox(instr(deintext,"#")
In der Infobox steht dann die Position innerhalb der Zeichenkette. Bei Rückgabe von 0 existiert # nicht innerhalb deines Textes.

Es geht auch komplizierter mit mid():

Code: Alles auswählen

dim deintext as string
dim cnt as int

deintext = "abcdefghij#klmno"

for cnt = 1 to len(deintext) step 1
 if mid(deintext,cnt,1)="#" then
  msgbox("# gefunden")
 end if
next cnt
In der for-Schleife wird deine Zeichenkette mit mid() Zeichen für Zeichen mit # verglichen. Wenn gefunden wird wieder ein Infofenster erzeugt.

MfG
Jonny1
***
Beiträge: 55
Registriert: Mi, 12.01.2011 21:49

Re: Von einer Schaltfläche zu dem Text

Beitrag von Jonny1 »

Vielen Dank für deine Hinweise. Das Problem besteht aber darin, von der Schaltfläche auf den ersten Buchstaben des Strings zu springen (im konkreten Fall "a"). Danach sollten alle Buchstaben abgetastet werden, bis "#" gefunden wird.

So, wie du das Problem gelöst hast, setzt im Voraus, daß man eine Kopie des zu untersuchenden Strings manuell anfertigt und in eine Variable des Makros kopiert. Daß würde bedeuten, daß der Anwender des Makros selbst mit Basic umgehen können muß. Das kann man aber nicht von jedem Anwender erwarten.

Jonny
insertfunnyname
Beiträge: 5
Registriert: Di, 25.01.2011 16:04

Re: Von einer Schaltfläche zu dem Text

Beitrag von insertfunnyname »

Tach,

richtig, das war ja auch nur als Beispiel für die Auswertung des Strings gedacht.

Du musst schon sagen
  • Was du nutzt - calc, writer, ...
    Wie deine auszuwertende Zeichenkette dort abgelegt ist - in Zelle, im Text, in Control ?
    Was soll passieren wenn # gefunden wurde?
Fragen über Fragen, aber wenn man das alles weiss kann man dir auch detaillierte Hilfe geben ;-)

MfG
Jonny1
***
Beiträge: 55
Registriert: Mi, 12.01.2011 21:49

Re: Von einer Schaltfläche zu dem Text

Beitrag von Jonny1 »

Ich versuche, auf dem kostenlosen Programm IBM Lotus Symphony:
2011-01-27_1048.png
2011-01-27_1048.png (120.02 KiB) 881 mal betrachtet
das sowohl OO-Basic als auch - wenn auch leider, zur Zeit mindestens, nicht im vollen Umfang - VBA kann, das, ein wenig zu imitieren, was f4 - die kostenfreie Transkriptionssoftware für Audio- und Videoaufnahmen (http://www.audiotranskription.de/f4.htm)BildBild leistet.

f4 verfügt über ein Textverarbeitungsprogramm, das rtf-Dateien erzeugen kann. Der Leistungsumfang in der Textverarbeitung ist aber gering und nicht zu vergleichen mit dem von IBM Lotus Symphony. Und vor allem kann man mit f4 keine Makros erstellen.

In Symphony wiederum kann man zwar ein Video starten, aber - soweit ich es verstanden habe - nicht ab einem wählbaren Zeitpunkt innerhalb des Videos und nicht mit einer wählbaren Zeitdauer (das letzte kann man - soweit ich es verstanden habe - auch mit f4 nicht).

In Microsoft Word hatte ich Makros geschrieben, die das Problem lösten. Word ist aber teuer und ein jugendlicher in Burundi auf dem Land verbraucht 3 Euro, um sich während eines ganzen Monats zu ernähren. Würde man einer Gruppe von Jugendlichen dort einen Notebook mit installierten Linux, IBM Lotus Symphony, VLC und anderen kostenlosen Programmen geben, dann könnten sie vielleicht lernen, Makros zu produzieren, für die sie Geld und somit eine Lebenschance bekommen könnten.

Dabei muß ich immer an Évariste Galois (http://de.wikipedia.org/wiki/%C3%89variste_Galois) denken und an das, was ich bereits vor einem halben Jahrhundert auf einem Buch zur Geschichte der Mathematik gelesen habe. Dort stand, daß Évariste deswegen vor seinem Tod im Alter von 20 Jahren so großartige Dingen leisten konnte, weil die Mathematik ein ziemlich komprimiertes Wissens-Feld ist, bei dem auch und besonders junge Menschen sehr schnell das wesentliche lernen können. Davon bin ich überzeugt. Und ich denke, daß das Programmieren große Ähnlichkeiten mit der Mathematik hat. Es dürfte also schneller gehen, jungen begabten Leuten das Programmieren beizubringen, als sie mit der kanonischen Schulausbildung zu dressieren, die wir im Westen erleiden mußten.

Und ich denke, daß für uns in den Überflußländern Bilder wie das von Évariste
Bild
besser zu ertragen sind als andere Bilder wie dies hier:
Bild
... und auch hygienischer, denn es bildet sich sehr viel Haß in den armen Ländern gegen die fetten Schlaraffianer und manche Kinder werden durch fanatische Islamisten für den Selbstmordterror gegen uns gedrillt.

Große Programme anzufertigen geht es nur, wenn man schon viel gelernt hat und, wenn man möglichst innerhalb einer gut abgestimmten Gruppe arbeitet. Makros hingegen kann man - soweit ich es verstanden habe - ziemlich schnell produzieren. Aber in vielen kleinen und größeren Büros dürfte - hoffe ich - dennoch eine hinreichende Nachfrage nach Programm-Fetzen geben, welche diese oder jene ganz individuelle Problemchen lösen können.

Kleine Makros auf einem großen Programm wie Symphony sind vielleich - so hoffe ich mindestens - in der Lage besseres zu leisten als ganze Programme wie f4.

f4 benutzt Strings der Art, die hier unten abgebildet ist:
2011-01-27_1042.png
2011-01-27_1042.png (78.92 KiB) 881 mal betrachtet
Klickt man irgendwo innerhalb des Strings " #00:01:12-0# ", dann sendet f4 dem Video-Programm VLC den Befehl, ein voreingestelltes Video ab genau der Szene abzuspielen, die dem Zeitpunkt 00 Stunden, 01 Minuten, 12 Sekunden und 0 Hundertstel Sekunden entspricht. Dafür muß man umständlicherweise sowohl die Adresse des Videos als auch die RTF-Datei vorladen. Mit Symphony - hoffe ich - dürfte alles viel, viel besser mit einem im Vergleich mikroskopischen Aufwand zustande kommen.

Da ich aber nicht weiß, wie man mit einem Maus-Klick dem Makro mitteilen kann, daß es anspringen soll, habe ich die Schaltfläche eingebaut, die du gesehen hast.

Mit einer Routine wie:

Code: Alles auswählen

Sub UebungenMitTextCursor4S				'Will overwrite an existing file without warning!
	dim oDoc,oVC,NewDoc,Zahl1,Zahl2,oTC,oNewDocVC,newname,newurl,n,StringA
 
	Zahl1 = InputBox("Zahl1 eingeben","Von ...")
	Zahl2 = InputBox("Zahl2 eingeben","... bis ...")
 
	oDoc = ThisComponent
	oVC = oDoc.CurrentController.getViewCursor		'Create View Cursor oVC

	oTC1 = oDoc.Text.createTextCursorByRange(oVC)	'Create Text Cursor by cloning the View Cursor (both have same position in doc)
	oTC2 = oDoc.Text.createTextCursorByRange(oVC)	'Create Text Cursor by cloning the View Cursor (both have same position in doc)
	bExtend = false
	oTC1.goRight(Zahl1, bExtend)
	oTC2.goRight(Zahl2, bExtend)
	oTC1.gotoRange(oTC2,true)			'Move Text Cursor to same location as oVC while selecting text in between (True)
	
	StringA = oTC1.String
	print StringA
End Sub
... veranlasse ich das Makro anzuspringen und mit einem String - der Vorübung wegen - zu hantieren. Es ist noch nicht das, was das Problem löst, sondern, wie gesagt, nur eine Vorübung.

Ein Problem, was ich gerne überwunden hätte, wenn ich nicht so beschränkt wäre, ist es, daß ich dem Makro sage, sich mit dem String zu beschäftigen, der rechts unmittelbar neben der Schaltfäche liegt.

Anstatt dessen springt das rebellische Makro zu einem String irgendwo auf dem Blatt, und zwar genau dort, wo sich der Kursor befand, bevor ich auf die Schaltfläche klickte.

Habe ich dir jetzt ein wenig über Zweck und Sinn der Aufgabe mitgeteilt, oder habe ich das Durcheinander nur noch verschlimmert?

Gianni

PS - Diesmal an Stephan viewtopic.php?f=18&t=45420#p165167 gerichtet:
Also ich habe hier Lotus Symphony 3.0.0 installiert und konnte bisher alle Makros, welche in Word, bzw Excel geschrieben wurden, ausführen. Ohne Probleme
"Das muß ich mir dann ansehen, denn mir ist das unbekannt, wenn es stimmt wäre es eine REvolution und ich würde sofort zu Sympghony wechseln."

Und, hast du dir es angesehen? Es schafft zwar nicht alle VBA-Makros, aber doch manche. Wirst du sofort zu Symphony wechseln?
insertfunnyname
Beiträge: 5
Registriert: Di, 25.01.2011 16:04

Re: Von einer Schaltfläche zu dem Text

Beitrag von insertfunnyname »

Guten Morgen,

hmm, da ich mich mit Lotus Symphonie gar nicht auskenne kann ich auch nix zu den Möglichkeiten sagen die du mit dem Prog. hast.

Jedenfalls
Anstatt dessen springt das rebellische Makro zu einem String irgendwo auf dem Blatt, und zwar genau dort, wo sich der Kursor befand, bevor ich auf die Schaltfläche klickte.
So rebellisch ist das gar nicht. Es macht genau das was du sagst. Text-Cursor und Maus-Cursor sind eben mal nicht dasselbe.

Was du brauchst ist eigentlich eine art simpler Parser, der ausgehend vom aktuellen Cursor im Text einen gewissen Bereich Vorwärts und Rückwärts (nämlich genau so viel wie deine Zeichenkette maximal lang sein kann) in einen String übernimmt und diesen dann hinsichtlich deiner VLC-Steuerzeichenkette untersucht. Das auslesen aus dem Text müsste durch ein Event wie zB Maustaste links gedrückt o.ä. gehängt werden. Sowas geht über keyhandler. Such mal im Forum. Da gabs mal was dazu.

Mir erschliesst sich aber eigentlich immer noch nicht warum es so kompliziert sein muss? Wieso sollte ich in einem Writer(Lotus Symphonie)-Text eine VLC-Steuerzeichenkette schreiben um bei klick darauf eine Mediendatei abzuspielen? Warum im Text? Geht nicht auch ein Textfeld (Control) oder ein Dialog mit einem Textfeld welcher mit einem Bruchteil des Aufwandes auszulesen ist??

MfG
Antworten