Seite 1 von 1

[Gelöst] Textmarken im Rahmen werden mehrfach gefüllt

Verfasst: Mi, 21.12.2011 16:27
von buzterman
Hallo an alle,

erst einmal muss ich mich für meinen Doppelpost entschuldigen, da ich erst darauf aufmerksam gemacht werden musste, dass es ein eigenes Forum für Basic gibt. Aber zurück zum Thema:

Ich bin sowohl hier als auch mit Starbasic absoluter Neuling. Ich habe folgendes Problem:

Nach unzähliger Suche und viel Ausprobieren habe ich es geschafft, meine Textmarken - die sich in einem Rahmen befinden - anzusprechen. Leider werden die Textmarken nicht nur einmal gefüllt sondern - abhängig davon wie viele Textrahmen das Dokument enthält - mehrfach. Bei vier Textrahmen wird die Marke vier Mal gefüllt. Leider reichen meine Kenntnisse nicht einmal ansatzweise, dieses Problem zu lösen. Kann mir jemand einen Tipp geben?

Code: Alles auswählen

Sub TextmarkeStringZuordnenFrame
	'***************************************
	'*Nach Textmarke in Framevorlage suchen*
	'***************************************
	If oDoc.getBookmarks().hasByName(sTextmarkeName) = True Then
		TextFrames = oDoc.getTextFrames()   
		Zahl = TextFrames.count()
			for Framezaehler = 0 to (Zahl - 1)
				Frame = TextFrames(Framezaehler)
			oTextmarke = oDoc.Bookmarks.getByName(sTextmarkeName) 
			oBookmark = oDoc.getBookmarks().getByName(sTextmarkeName).getAnchor
			if not isEmpty(oBookmark.TextFrame) then
				oCursor = oBookmark.Text.CreateTextCursorByRange(oTextmarke.Anchor)
				oCursor.String = sTextmarkeString
			end If
		next Framezaehler
	End If
End Sub
Beste Grüße,

Henne

Re: Textmarken im Rahmen werden mehrfach gefüllt

Verfasst: Do, 22.12.2011 19:36
von DPunch
Aloha

Wofür iterierst Du über alle TextFrames?
Nehmen wir an, Du hast 4 Textframes (TextFrame1-4) und jeweils eine Textmarke darin (Bookmark1-4).
Nehmen wir weiterhin an, Du willst jetzt "meineTextmarke1" (sTextmarkeName) füllen mit "meinText" (sTextmarkeString).
Nun iterierst Du über alle Textframes, also insgesamt 4 Mal und sprichst hier

Code: Alles auswählen

         oTextmarke = oDoc.Bookmarks.getByName(sTextmarkeName)
         oBookmark = oDoc.getBookmarks().getByName(sTextmarkeName).getAnchor
         if not isEmpty(oBookmark.TextFrame) then
            oCursor = oBookmark.Text.CreateTextCursorByRange(oTextmarke.Anchor)
            oCursor.String = sTextmarkeString
         end If
in jedem einzelnen Schleifendurchlauf die gleiche Textmarke an, nämlich "meineTextmarke1" und schreibst entsprechend in jedem einzelnen Schleifendurchlauf in den gleichen TextFrame (nämlich den von "meineTextmarke1") den Text "meinText".
Entweder Du baust in Deinen Code eine Abbruchbedingung ein, sobald Du die Textmarke befüllt hast

Code: Alles auswählen

if not isEmpty(oBookmark.TextFrame) then
	oCursor = oBookmark.Text.CreateTextCursorByRange(oTextmarke.Anchor)
	oCursor.String = sTextmarkeString
	exit sub 'Arbeit getan
end If
oder, noch viel klüger, Du sparst Dir die überflüssige Schleife über alle Textframes.

Code: Alles auswählen

Sub TextmarkeStringZuordnenFrame
   '***************************************
   '*Nach Textmarke in Framevorlage suchen*
   '***************************************
	If oDoc.getBookmarks().hasByName(sTextmarkeName) = True Then
		oBookmark = oDoc.getBookmarks().getByName(sTextmarkeName).getAnchor
		if not isEmpty(oBookmark.TextFrame) then
			oCursor = oBookmark.Text.CreateTextCursorByRange(oTextmarke.Anchor)
			oCursor.String = sTextmarkeString
		end If
	end if
End Sub

Re: Textmarken im Rahmen werden mehrfach gefüllt

Verfasst: Fr, 23.12.2011 11:06
von buzterman
Vielen Dank. Ich werde Deine Hinweise gleich einmal umsetzen. Wie gesagt, bin ich völlig neu auf dem Gebiet und muss erst noch einiges Verstehen lernen. Ich melde mich auf jeden Fall noch einmal mit dem Ergebnis.

Beste Grüße, Henne

Edit: Sehr schön, es klappt. Ich werde mir Deine Hinweise über die Feiertage noch einmal richtig durchdenken, damit ich auch kapiere, warum es so klappt. Vielen Dank nochmal und schöne Feiertage.