Seite 3 von 6

Verfasst: 06.10.2008 17:53
von Kiffi
so, jetzt hab ichs :-)

Das Bild wurde zwar angezeigt, allerdings viel zu weit rechts. Es ist so, dass
in PB die RightMargin-Property nicht initial gesetzt wird (wie in VB). Das
muss dann mittels folgenden Workarounds nachgeholt werden.

Code: Alles auswählen

[...]
RTB_Object\Invoke("LoadFile('[Dein RTF]')") ; Pfad anpassen!
RTB_Object\SetProperty("RightMargin=1")
RTB_Object\SetProperty("RightMargin=0")
[...]
Grüße ... Kiffi

Verfasst: 06.10.2008 18:23
von Palandt
Sauber, hundertprozentig!!! Der Meister hat's gelöst!

Jetzt stell ich (hoffentlich!!!) noch 2 Fragen, sodass ich nicht wieder nach ein paar Stunden / Tagen hier um Hilfe jammern muss:

1. Warum erst RightMargin = 1 um es dann wieder auf Null zu setzen?

2. Wie spreche ich bestimmte Eigenschaften des Textfeldes an, wenn ich beispielsweise die Formatierung des darin enthaltenen, selektierten Textes ändern möchte? Denn wenn ich zum Test mal einfach

RTB_Object\SetProperty("SelFontSize=20")

anfüge (in VB wäre es ja Me.RTF_Feld.SelFontSize = 20), dann geschieht nichts, der Text wird nicht in größeren Buchstaben angezeigt. Wenn die Befehle mithin nicht aus VB herleitbar sind, verrate mir dann doch bitte noch, wo ich eine Befehlsreferenz über das jetzt - dank dir - funktionierende RTF-Feld herbekomme.

Verfasst: 06.10.2008 18:42
von Kiffi
Palandt hat geschrieben:1. Warum erst RightMargin = 1 um es dann wieder auf Null zu setzen?
das Control ist so 'intelligent', dass es eine Änderung von 0 auf 0 nicht
wahrnimmt. Erst mit der Änderung von 0 auf 1 und dann wieder zurück auf
0 wird der Zeilenumbruch richtig gesetzt.

Palandt hat geschrieben:2. Wie spreche ich das Textfeld an, wenn ich beispielsweise die Formatierung des darin enthaltenen, selektierten Textes ändern möchte, ihn bspw. in "Fettdruck" erscheinen lassen? RTB_Object\SetProperty ("SelBold = True")?
fast! :-)
So ist es richtig:

Code: Alles auswählen

RTB_Object\SetProperty("SelBold=#True")
Grüße ... Kiffi

P.S.: Dein Edit zu spät gesehen:

Code: Alles auswählen

RTB_Object\SetProperty("SelFontSize=20") 
funktioniert problemlos

Verfasst: 06.10.2008 18:55
von Palandt
Irgendwie haut das bei mir noch nicht so ganz hin, aber bevor ich wieder meinen Herzschrittmacher runtertakten muss :), teste ich das Teil in aller Ruhe in meinem Prog und wahrscheinlich geht das mit SelFontSize spätestens dann, wenn ich etwas aus dem Text selektiert hab und die Funktion per Button aufrufe.

Puh, ich bin erst mal saufroh, dass das Ding jetzt alles so anzeigt wie ich es auch erstellt hab, den Rest krieg ich auch noch irgendwie hin, du hast mir echt sehr weitergeholfen. Und ich glaube, es werden zwar noch einige kleinere Probleme auftreten, aber wenn das mit dem RTF-Feld erst mal abgefrühstückt ist, dann bin ich ziemlich sicher, dass kein wirklich großer Brocken mehr im Weg ist. Bill Gates, ich kommmeeeeee!

Verfasst: 06.10.2008 19:02
von Kiffi
Palandt hat geschrieben:wahrscheinlich geht das mit SelFontSize spätestens dann, wenn ich etwas aus dem Text selektiert hab
ähm, ja das habe ich jetzt allerdings als vorausgesetzt angenommen. Was
meinst Du, wofür das Sel in SelFontSize steht? ;-)

Grüße ... Kiffi

Verfasst: 06.10.2008 19:53
von Palandt
So wie ich mich manchmal zu schnell ärgere, so freu ich mich leider auch zu früh. Ich hab das Teil in mein Prog eingebaut und musste feststellen, dass es ist nicht möglich ist, den Invoke - Befehl mit String-Variablen zu nutzen.

Code: Alles auswählen

Case #Panel_Bearbeiten_Main
    			szs = RTrim(GetDatabaseString(#DB_QM,2))
    			If GetGadgetState(#Panel_Bearbeiten_Main) = 1
    				sRTFInvoke = "LoadFile('K:\VB-Programme\QM2\Antworttexte\"+ szs +".txt')"
    				RTF_Feld\Invoke(sRTFInvoke) 
  					RTF_Feld\SetProperty("RightMargin=1")
  					RTF_Feld\SetProperty("RightMargin=0") 
    				
    				
    				
    			EndIf	
Die Variable szs enthält bspw. den Wert: Antwort2535385A14. Es erscheint immer die Fehlermeldung (in der Zeile "RTF_Feld\Invoke(sRTFInvoke)"):

invalid memory access. (read error at address 0)

Achso, wie du ja festgestellt hast, am ".txt" liegts nicht.

//EDIT: Wenn das tatsächlich nicht gehen sollte, dann kann ich trotz der Mühen, die du dir mit der Identifikation des Fehlers vorhin und den Hinweisen an mich gegeben hast, nichts mit dem RTF-Feld anfangen. Beim PB-Feld ging dagegen das variablenbasierte Einladen von Texten, dafür hakte es ja bei der Grafik...ich glaub, auf mir lastet ein Fluch....

Verfasst: 06.10.2008 20:03
von Kiffi
Palandt hat geschrieben:musste feststellen, dass es ist nicht möglich ist, den Invoke - Befehl mit String-Variablen zu nutzen.
funktioniert hier tadellos. Hast Du Dir schon mal testweise ausgeben lassen,
was in sRTFInvoke steht? Stimmt der Pfad, der in sRTFInvoke steht?

Grüße ... Kiffi

Verfasst: 06.10.2008 20:28
von Palandt
Du hast Recht, diese (Testcode-)Zeilen:

Code: Alles auswählen

 sRTFInvoke.s = "LoadFile('K:\VB-Programme\PURE BASIC\QM\Antworttexte\Antwort4559099A10.txt')"
  RTF_Feld\Invoke(sRTFInvoke) 
funzen problemlos im Testcode von dir zur Erstellung der ersten Comate-Integration des Feldes, setze ich die gleichen Zeilen dann aber in mein Prog ein, da kommt dieser dreckige Fehler.

Aber gut, dann liegts wohl wieder mal an meiner Doofheit, da bin ich etwas beruhigt, dass es grundsätzlich möglich ist *Herzschrittmacher neu justiert*.

Werd jetzt mal auf Fehlersuche gehen, vielleichts liegts daran, dass das Teil in einem Panel aufgerufen wird, oder daran, dass ich das Teil in einer Include-Datei kreiere, dann aber in meiner Main-Datei aufrufe, vielleicht habe ich aber auch wieder ne zu große Hintergrundgrafik nicht disabled, ich werd jetzt erst mal alles Mögliche verändern, vielleicht finde ich's ja alleine raus...Schlaf ade.....

Verfasst: 06.10.2008 20:44
von Kiffi
Knackpunkte sind zum einen diese Zeile:

Code: Alles auswählen

szs = RTrim(GetDatabaseString(#DB_QM,2)) 
(liefert GetDatabaseString() wirklich den Dateinamen?)

und diese Zeile:

Code: Alles auswählen

RTF_Feld\Invoke(sRTFInvoke)
(ist RTF_Feld mit dem OCX-Objekt belegt?)

==> also zu Testzwecken mal folgendes einbauen:

Code: Alles auswählen

[...]
szs = RTrim(GetDatabaseString(#DB_QM,2))
Debug "GetDatabaseString() liefert: '" + szs + "'" ; <--- Das hier
[...]
und

Code: Alles auswählen

[...]
If RTF_Feld
  RTF_Feld\Invoke(sRTFInvoke)
Else
  Debug "RTF_Feld ist nicht belegt!" ; <--- Das hier
EndIf
[...]
ausserdem ist mir ein wenig suspekt, dass Du anscheinend immer
LoadFile() ausführst, wenn das PanelGadget angeklickt wird(?). (Ist aber
nur 'ne Vermutung und hat auch wahrscheinlich nix mit dem eigentlichen
Fehler zu tun; aber auf jeden Fall verbesserungswürdig)


Grüße ... Kiffi

Verfasst: 06.10.2008 20:51
von Palandt
Sauber, ich hab den Fehler gefunden, jetzt klappt alles wie am Schnürchen; musste nur das RTF_Feld als GLOBAL deklarieren! So, ich hoffe jetzt kann ich erst mal ne Zeit mein HB-Männchen-Kostüm ausziehen und etwas beruhigter proggen...:)

//EDIT: Das mit dem Panel sieht im Prog richtig edel aus, auf der einen Seite kannst du die Fragen oder Themen auswählen (und nach Stichworten suchen), dann switcht du auf das andere Panel um und es erscheint die dazugehörige Antwort, die du dann modifizieren kannst. Das ist so gewollt...und zudem hab ich das bei VB auch in der Weise gemacht und das Programm hat ne 4 jährige Entwicklungsphase hinter sich, das hat nicht einen einzigen Bug mehr, seit ca. einem Jahr - und ich benutze das Teil so gut wie fast jeden Tag zum Lernen. Also denke ich mal, das müsste bei PB auch so funzen, mit dem Panel und dem Neuladen, da es schließlich auch ein "VB-Baby" in sich trägt...:)