Seite 1 von 4

Comate-RTF-Feld und die leidige Übertragbarkeit

Verfasst: 21.11.2008 12:59
von Palandt
Hallo Freunde der purebasicalen Sprache,

ja mich gibt's noch...:)...mein Programm ist jetzt in der "Betaversion" fertig programmiert und mag es kaum glauben, die lange Zeit meiner Forumsabstinenz ist tatsächlich dem Umstand geschuldet, dass ich bislang kein einziges Problem mehr hatte. Bislang! Für Interessierte, hier einige Screenshots meines Progs:

http://www.bilder-space.de/show.php?fi ... l4FEF.jpg

So nun aber zu meinem Anliegen. Ich habe - wie eventuell einige unter euch noch wissen - seinerzeit das Problem gehabt, dass ich in mein Programm (ein für Juristen bzw. Jura-Studenten konzipiertes Prog, dass es einem ermöglicht, sich selbst mit vorher eingegebenen Lektionen abzufragen) ein Textfeld integrieren wollte, das es mir ermöglicht auch Word- oder andere Grafiken (innerhalb des Textes) anzuzeigen. Dies ist mit dem Pure-Basic-mitgelieferten Textfeld (im Moment jedenfalls noch) nicht möglich, sodass ich auf Anraten einiger Forumsprofis Comate verwendet habe, um das Richtextfeld von Windows bzw. Visual Basic für meine Zwecke zu geißeln. Nicht zuletzt dank Kiffis Hilfe (an Kiffi: Trotz unserer kleinen Meinungsverschiedenheiten habe ich dich übrigens wie versprochen in den Danksagungen meines Progs erwähnt, und das sag ich jetzt nicht, damit du mir wieder hilfst) habe ich es auch geschafft, das RTF-Feld über Comate einzubinden, sodass es auf MEINEM PC (Vista) problemlos läuft. Ich hab vor lauter Übermut sogar noch einen draufgesattelt und auch gleich noch ein PDF-Feld über Comate als Luxusfunktion integriert, sodass meine Nutzer jetzt ihre Antworten entweder in meinem RTF-Feld, als HTML-Datei oder als PDF abspeichern können. Was bin ich doch fürn toller Hecht !:)

Gestern habe ich dann das erste Mal versucht, mein Meisterwerk einem Kumpel zu überspielen. Alles funzte perfekt....bis er in meinem Prog das "Bearbeiten-Menu" öffnete (siehe Screenshot). Denn dort taucht zum ersten Mal das RTF-Feld auf. Er teilte mir dann deprimiert mit, dass er eine Fehlermeldung erhalte ("Konnte RICHTEXT.RichtextCtrl (Antwortfeld) nicht erstellen!" und das Programm fortan seine Dienste verweigere. Diese Meldung hatte ich einprogrammiert und sie kommt immer dann zum Einsatz, wenn die Initialisierung des Feldes fehlschlägt. Sofort erinnerte ich mich an die Warnung von TS-Soft, doch möglichst auf diese Active-X-Dinger zu verzichten, da sie nur Probleme bereiten würden. Recht hat er gehabt, nur ich habe keine andere Möglichkeit als dieses Feld zu verwenden oder ich reiße meinem Prog das Herz heraus.

Ich habe mich ebenfalls daran erinnert, dass es vielleicht daran liegen könnte, dass ich vergessen hatte, das ActiveX-Control zu registrieren. Auch das probierte ich danach aus und schickte die modifizierte Datei meinem Komillitonen, doch es erschien wieder dieselbe Fehlermeldung. Hier ist das Code-Fragment - bitte keine Anfragen, den ganzen Code zu schicken, das sind mittlerweile mehr als 5000 Zeilen Code -:

Code: Alles auswählen

;- - RTF-Feld: ANTWORT -
    	
;     	If COMate_RegisterCOMServer("c:\Windows\system32\RICHTX32.ocx") = #S_OK
;       			blnRegister = #True
;       			RTF_Feld = COMate_CreateActiveXControl(372, 280, 500, 370, "RICHTEXT.RichtextCtrl")
;     		Else 
; 	    		MessageRequester("!", "Konnte RICHTEXT.RichtextCtrl (Antwortfeld) nicht erstellen!")
; 		    	End
;     	EndIf 
;     	
    	
    	RTF_Feld = COMate_CreateActiveXControl(372, 280, 500, 370 , "RICHTEXT.RichtextCtrl")
 
		If RTF_Feld = 0
			MessageRequester("!", "Es erfolgt eine Registration des Steuerelements.")
	    	If COMate_RegisterCOMServer("c:\Windows\system32\RICHTX32.ocx") = #S_OK
      			blnRegister = #True
      			RTF_Feld = COMate_CreateActiveXControl(372, 280, 500, 370, "RICHTEXT.RichtextCtrl")
    		Else 
	    		MessageRequester("!", "Konnte RICHTEXT.RichtextCtrl (Antwortfeld) nicht erstellen!")
		    	End
    		EndIf 
	  	EndIf

Die auskommentierte Variante habe ich auch getestet. Läuft ebenfalls nicht.

Vielen Dank im Voraus!

PS: Ich habe keine Ahnung davon, wie der Comate-Programmiergott sein Prog zusammengeschustert hat, wäre also froh, wenn ihr mir Tipps geben könntet, die auch jemand versteht wie ich. Also einer, der weder Ahnung von Windows-API-Programmierung hat noch weiss, wie man DLL erstellt.
Von Assembler gar nicht erst zu sprechen...

Verfasst: 21.11.2008 13:12
von Kiffi
die RICHTX32.ocx ist auch in dem Pfad "c:\Windows\system32\" bei Deinem Bekannten vorhanden?

Grüße ... Kiffi

Verfasst: 21.11.2008 13:48
von Palandt
Ja, ist sie. Ich hab auch nach der Schlappe mit meinem Kumpel nen Test auf meinem Laptop (Windows XP) durchgeführt. Da erschien dieselbe Fehlermeldung, obgleich ich vorher mein Steuerelement in genau diesen Ordner kopiert hab. Deswegen weiß ich auch nicht mehr weiter, mittlerweile hab ich ja auch schon ein gewisses Feeling für PB entwickelt, ein gewisses aber nur :), und nun das. Ok, ich erspare dir jetzt meine üblichen Herzinfarktgeschichten, aber irgendwie hab ich schon sonne klitzekleine Sorge, dass ich das Prog nicht transferieren kann...

...muss ich da eventuell erst nen Installer schreiben? Weil ich hab es so gemacht: Exe-Dateien + Datenbank zum Kollegen gemailt, dann hab ich ein Starterprog, das ihn zur Eingabe des Pfades auffordert. Danach kann er mein Hauptprogramm starten. Alles läuft. Bis er dann aufs Bearbeiten-Menu geht, da nämlich ist das RTF-Feld verankert und danach ist Sense.

//EDIT: Achso, bei meinem Laptop kommt es übrigens gar nicht zur Fehlermeldung, da hängt er sich schon vorher auf. Also sobald ich auf "Bearbeiten" gehe, während bei meinem Kumpel zumindest die Fehlermeldung erscheint. Als ich dann mein PB auf meinem Laptop installiert hab und es aus dem Originalcode heraus gestartet hab, da tauchte dann die Fehlermeldung innerhalb des Comate-Codes auf. Da wusste ich gleich, das ist was Härteres...:)

Verfasst: 21.11.2008 14:07
von Kiffi
dann schreib Dir zu Kontrolle man eine Mini-Exe mit diesem Code:

Code: Alles auswählen

XIncludeFile("comate.pbi")
If COMate_RegisterCOMServer("c:\Windows\system32\RICHTX32.ocx") = #S_OK 
  MessageRequester("", "Ja")
Else
  MessageRequester("", "Nein")
EndIf
und führe sie auf Deinem Laptop aus. Somit kann man zumindest
ausschließen, dass es nicht an anderen Faktoren liegt.

Grüße ... Kiffi

Verfasst: 21.11.2008 14:23
von Palandt
Hab ich gemacht, Kiffi, wie zu erwarten war, erscheint ein "Ja". Jetzt hab ich aber gleich mal die Fehlermeldung vom Laptop protokolliert, vielleicht kannst du ja daraus etwas ersehen.

Zeile 250 in der Datei Comate.pbi

Error: Invalid memory access (read error at address 0)

Zeileninhalt:

hResult = AtlAxCreate (ProgID, hWnd, 0, 0)

Danke wie immer, dass du dich um ne Lösung bemühst!

//EDIT: Wobei, wie bereits erwähnt, mein Laptop bislang am "brutalsten" war, die Maschine meines Kollegen hat es immerhin zur Fehlermeldung kommen lassen.

Verfasst: 21.11.2008 14:37
von Kiffi
Palandt hat geschrieben:Hab ich gemacht, Kiffi, wie zu erwarten war, erscheint ein "Ja".
war das zu erwarten? Also funktioniert die Registrierung der Komponente.

Ich meine aus Deinen Fragen herauslesen zu können, dass das
Programm eben aufgrund der nicht durchführbaren OCX-Registrierung
nicht funktioniert.

Wenn die also Registrierung funktioniert, liegt der Fehler ausserhalb des
Schnippsels, den Du in Deinem Ursprungsposting aufgeführt hast.

Die Fehlermeldung aus der COMate.pbi ist nicht wirklich hilfreich. Du
müsstest herausfinden, welche Zeile in Deinem Code zuvor aufgerufen
wurde.

Grüße ... Kiffi

Verfasst: 21.11.2008 15:15
von Palandt
Mensch Kiffi, so arrogant wie es vielleicht in deinen Ohren klang, wars nicht gemeint, müsstest mich doch langsam kennen. Meinte nur, dass ein Fehler bei der Einbindung der Comate.pbi sich freilich viel früher hätte bemerkbar machen müssen. Also wieder die Röcke aus und die Hosen an, ich schick dir jetzt das Aufrufkommando:

Code: Alles auswählen

;- ### WINDOW_ACTION ###
    		Case #ButtonImage_Abfrage 
    			CloseWindow (#Window_Action)
    			Open_Window_Abfragemod()
    		
    		Case #ButtonImage_Bearbeiten
    			CloseWindow (#Window_Action)
    			Open_Window_Action_Bearbeiten()
    			iFrageSelected = 0
    			iAnzeigeFragen = 1
    			sSQL = "SELECT * FROM "+sProjektname +" ORDER BY FragenID"
    			ClearGadgetItemList(#Listview_Bearbeiten) 
                If DatabaseQuery(#DB_QM, sSQL)
                 	ix = 0
				    While NextDatabaseRow(#DB_QM)				    		
				      SetGadgetState(#Radio_Frage, 1)
				      SText = ""	
				      sText = "[" + GetDatabaseString(#DB_QM, 0) + "] " + RTrim(GetDatabaseString (#DB_QM, 1)) 
				      SText = PeekS(@SText, -1, #PB_UTF8)
				      AddGadgetItem(#Listview_Bearbeiten, ix, sText)
				      
				      ix = ix +1
				    Wend
				 EndIf
    			 If ix = 0 
    			 	MessageRequester ("Hinweis","Falls dies ein neues Projekt sein sollte, ist alles in bester Ordnung. Sollte es aber ein Projekt sein, das bereits Fragen enthält, dann sind die jetzt wohl abhanden gekommen...",0) 
    			 EndIf
    		
    		Case #ButtonImage_Hauptmenu
    			CloseWindow (#Window_Action)
    			
und das Fenster selbst:

Code: Alles auswählen

Procedure Open_Window_Action_Bearbeiten()


  If OpenWindow(#Window_Action_Bearbeiten, 50, 1, 900, 680, "Bearbeiten",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar )
    
    ;- Shortcuts
    AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F1, 50) ;normal
    AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F2, 51) ;bold
    AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F3, 52) ;italic
    AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F4, 53) ;small
    AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F5, 54) ;underlined
    AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F6, 55) ;big
    AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F7, 56) ;center
    
    AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F8, 57); WS1 ausgeben
    
    ;58 ist der zugehörige Menuwert für den Shortcut ENTER im Abfragefenster
    
;     AddKeyboardShortcut(#Window_Action_Bearbeiten, #PB_Shortcut_F12, 59); F12 = Rand +
    
    If CreateGadgetList(WindowID(#Window_Action_Bearbeiten))
      ImageGadget(#Image_Action_Bearbeiten, 0, 0, 900, 680, ImageActionBearbeiten)
      DisableGadget (#Image_Action_Bearbeiten, 1)
      
      ;- --- Seitenbuttons & -options ---
      
      ;- Neu / Ändern / Einfügen
      ButtonImageGadget(#ButtonImage_AB_Neu, 30, 320, 90, 40, ImageIconNeu)
            
      ButtonImageGadget(#ButtonImage_AB_Aendern, 30, 365, 90, 40, ImageIconAendern)
      
      ButtonImageGadget(#ButtonImage_AB_Einf, 30, 410, 35, 40, ImageIconEinf)
      StringGadget(#String_AB_Einf, 70, 410, 50, 20,"", #PB_String_Numeric)
      CheckBoxGadget(#CheckBox_AB_EinfModus, 70, 430, 50 , 20, "EM")
      GadgetToolTip(#CheckBox_AB_EinfModus, "Aktivieren, wenn mehrere Datensätze hintereinander eingefügt werden sollen. Einfügenummer wird dann hochaddiert.")
      SetGadgetFont(#CheckBox_AB_EinfModus, FontID_Arial8)
      
	  ;- SpinGadget
	  SpinGadget(#Spin_Format, 30, 455, 90, 30, 1, 3)
	  
      
      
      ButtonImageGadget(#ButtonImage_AB_Loeschen, 30, 490, 90, 27, ImageIconLoeschen)
      
      ButtonGadget(#Button_AB_WSAndSymbols, 30, 522, 90, 20, "W/S - Speicher")
      
      ;- CB-Buttons
           
	  ButtonGadget(#Button_AB_CBQuickchange, 30, 547, 90, 20, "QUICKCHANGE")		        
      ButtonGadget(#Button_AB_CBIn, 30, 572, 90, 20, "Antwort-ID >> CB")
      GadgetToolTip(#Button_AB_CBIn, "Speichern der Antwort-ID im Zwischenspeicher")
            
      ButtonGadget(#Button_AB_CBOutChange, 30, 597, 90, 20, "CB >> Ändern")
      GadgetToolTip(#Button_AB_CBOutChange, "Ändert die aktuelle Antwort-ID mit der aus dem Zwischenspeicher")
      
      ButtonGadget(#Button_AB_CBOutNew, 30, 623, 90, 20, "CB >> Neu")
      GadgetToolTip(#Button_AB_CBOutNew, "Erstellt einen neuen Datensatz mit der Antwort-ID aus dem Zwischenspeicher")
      
      
           
      ;- --- Panels ---
      PanelGadget(#Panel_Bearbeiten_Main, 150, 200, 745, 450)
      	
      	;- <Panel Anzeigen>
      	AddGadgetItem(#Panel_Bearbeiten_Main, -1, "ANZEIGENMODUS")
      		ListViewGadget(#Listview_Bearbeiten, 13, 38, 715, 350)
      		#LB_SETHORIZONTAL = $194 
			iBreite = 1800
			SendMessage_(GadgetID(#Listview_Bearbeiten), #LB_SETHORIZONTAL, iBreite, #Null) 
			
			OptionGadget(#Radio_Frage, 13, 8, 120, 30, "Frage anzeigen")
      		OptionGadget(#Radio_Thema, 148, 8, 120, 30, "Thema anzeigen")
      		
      		ButtonGadget(#Button_AB_Refresh, 283, 13, 120, 20, "REFRESH")
      		
      		ButtonGadget(#Button_AB_Suche, 480, 13, 100, 20, "Suche in Fragen!")
      		GadgetToolTip(#Button_AB_Suche, "Merk dir nach dem Anzeigen der Suchergebnisse die Fragen-IDs, und dann betätige Refresh.")
      		StringGadget(#String_AB_Suche, 590, 13, 137, 20, "")
      		
      		TextGadget(#Text_KonterpartAnzeige, 13, 400, 465, 30, "") 		
      		SetGadgetFont(#Listview_Bearbeiten, FontID_Arial8)
      	
      	;- <Panel Eingabe- / Änderung>
      	AddGadgetItem(#Panel_Bearbeiten_Main, -1, "EINGABE- / ÄNDERUNGSMODUS")
      		
      		;- Comate RTF
      		If COMate_RegisterCOMServer("c:\Windows\system32\RICHTX32.ocx") = #S_OK
               blnRegister = #True
               RTF_Feld = COMate_CreateActiveXControl(233, 15, 500, 381, "RICHTEXT.RichtextCtrl")
          	Else
             MessageRequester("!", "Konnte RICHTEXT.RichtextCtrl (Antwortfeld) nicht erstellen!")
             End
       		EndIf 
      		
      		
;       		RTF_Feld = COMate_CreateActiveXControl(233, 15, 500, 381 , "RICHTEXT.RichtextCtrl")
;  
; 		  	If RTF_Feld = 0
; 			MessageRequester("!", "Es erfolgt eine manuelle Registration.")
; 		    	If COMate_RegisterCOMServer("c:\Windows\system32\RICHTX32.ocx") = #S_OK	      			
; 	      			MessageRequester("Hinweis", "Es erfolgt eine Registrierung des RTF-Feldes.",0)
; 	      			blnRegister = #True
; 	      			RTF_Feld = COMate_CreateActiveXControl(233, 15, 500, 381, "RICHTEXT.RichtextCtrl")
; 	    		Else 
; 		    		MessageRequester("!", "Konnte RICHTEXT.RichtextCtrl (Antwortfeld) nicht erstellen!")
; 			    	End
; 	    		EndIf 
; 	  		EndIf
		  	
		  	;- Scrollbars anfügen
		  	RTF_Feld\SetDesignTimeMode(#True)
			RTF_Feld\SetProperty("ScrollBars=" + Str(#rtfBoth))
			RTF_Feld\SetDesignTimeMode(#False)
			
		  	;- Thema
		  	TextGadget(#Text_AB_Thema, 13, 20, 100, 30, "THEMA")
			EditorGadget(#Editor_AB_Thema, 13, 40, 210, 50)
      		SetGadgetFont(#Editor_AB_Thema, FontID_Arial8_Bold)
			CheckBoxGadget(#CheckBox_ThemaLoeschen, 63, 14, 120, 25, "Thema nicht löschen")      		
			SetGadgetFont(#CheckBox_ThemaLoeschen, FontID_Arial8)
			
			;- Sum
			ButtonGadget(#Button_AB_SUM, 13, 90, 100, 20, "<SUM>")
			ButtonGadget(#Button_AB_NOSUM,123, 90, 100, 20, "<NO SUM>")
			
			;- INFO
			ButtonGadget(#Button_AB_Info, 13, 112, 210, 15, "<INFO> </INFO>")
			
			;- Frage
			TextGadget(#Text_AB_Frage, 13, 130, 100, 30, "FRAGE")
			; Eingabefeld mit Scrollbars
			ID_EdG_Frage = EditorGadget(#Editor_AB_Frage, 13, 150, 210, 100)
			SetGadgetFont(#Editor_AB_Frage, FontID_Arial10)
			SendMessage_(ID_EdG_Frage, #EM_SETTARGETDEVICE, 0, 0)   
			; FragenID
			TextGadget(#Text_AB_FragenID, 150, 130, 80, 20, "(ID:  )")
			
			;- Löschen / HTML-Pfadeingabe
			ButtonGadget( #Button_AB_LoescheFelder, 13, 255, 210, 20, "!!! FELDER LÖSCHEN !!!")
			
			StringGadget(#String_AB_HTML, 13, 280, 210, 20, "Pfad einer HTML-Datei hier eingeben")
			SetGadgetColor(#String_AB_HTML, #PB_Gadget_BackColor, $83C173)
			ButtonGadget ( #Button_AB_TestHTML, 13, 300, 90, 20, "Teste Link")
			
			;- Frage doppelt?
			ButtonGadget(#Button_AB_FrageDoppelt, 133, 300, 90, 20, "Frage doppelt?")

			;- Texteditor
			TextGadget(#Text_AB_Editormodus,13, 320, 210, 20, "Editormodus", #PB_Text_Center)
						
			ButtonGadget(#Button_AB_Normal, 13, 340, 70, 20, "Normal (F1)")
			SetGadgetFont(#Button_AB_Normal, FontID_Arial8)
			
			ButtonGadget(#Button_AB_Bold, 83, 340, 70, 20, "Bold (F2)")
			SetGadgetFont(#Button_AB_Bold, FontID_Arial8_Bold)
			
			ButtonGadget(#Button_AB_Italic, 153, 340, 70, 20, "Italic (F3)")
			SetGadgetFont(#Button_AB_Italic, FontID_Arial8_Italic)
			
			ButtonGadget (#Button_AB_Small, 13, 360, 70, 20, "Small (F4)")
			
			ButtonGadget (#Button_AB_Underlined, 83, 360, 70, 20, "Underl. (F5)")
			SetGadgetFont(#Button_AB_Underlined, FontID_Arial8_Underlined)
			
			ButtonGadget (#Button_AB_Big, 153, 360, 70, 20, "BIG (F6)")
			SetGadgetFont(#Button_AB_Big, FontID2)
			
			ButtonGadget (#Button_AB_Center, 83, 380, 70, 20, "Center (F7)")
			
			 ;- --- Trackbar ---
      		TrackBarGadget(#Trackbar_Antworten, 233, 400, 500, 20, 1, 500)
						
			
      	CloseGadgetList()
      	      	     
      
    EndIf
  EndIf
EndProcedure
Ich hoffe du entdeckst nen Rechtschreibfehler....;), denn ich glaube, dass diesmal das Prob im Comate-Code verborgen liegt (nicht als Programmierfehler, soviel Blasphemie maße selbst ich mir nicht an, sondern in der Anwendung des Codes...) und den durchblicke ich nicht mal ansatzweise...

Verfasst: 21.11.2008 15:21
von Kiffi
Palandt hat geschrieben:Mensch Kiffi, so arrogant wie es vielleicht in deinen Ohren klang, so wars nicht gemeint, kennst mich doch schon langsam, also wenn die Einbindung der Comate.pbi nicht geklappt hätte, wär doch das Prog viel früher agbeschmiert, das meinte ich nur.
wie kann es sein, dass Du mich andauernd falsch verstehst? :roll:

Noch einmal zur Klärung:

Deine Aussage war: Dein Programm funktioniert nicht, weil
RICHTX32.ocx auf anderen Rechnern nicht richtig registriert wird.

In Deinem Urspungsposting zeigst Du den
COMate_RegisterCOMServer()-Schnippsel.

Mit meinem Mini-Testcode konnten wir nachweisen, dass das Registrieren
der Komponente (also der RICHTX32.ocx - Komponente) richtig
funktioniert.

(können wir uns in Zukunft darauf einigen, dass ich (und der Rest der
Welt) mit Komponente im Zusammenhang mit ActiveX immer DLLs oder
OXCe meine und nicht (wie Du anscheinend annimmst) PB-Includes?)

Ich habe bis hierhin nie in Zweifel gestellt, dass Du COMate.pbi richtig
eingebunden hast.

Ich gehe davon aus, dass der Fehler in einem anderen Teil Deines Codes
liegt. Im Zweifelsfall solltest Du einen funktionierenden Code aus diesem
Thread
nehmen und diesen bei Deinem Bekannten ausführen.

Grüße ... Kiffi

Verfasst: 21.11.2008 15:36
von Palandt
Wenn der Fehler des Codes aber in einem anderen Teil meines Progs läge, dann müsste er sich doch auch bei mir auswirken. Das geschieht aber nicht, der vermaledeite Fehler tritt immer dann auf, wenn jemand versucht das Bearbeiten-Menu aufzurufen und meistens (Kumpel, Laptop schon früher) erst dann, wenn dieser jemand zum ersten Mal versucht, eine "Seite" aufzurufen, die das Comate-Feld beheimatet. Ich glaube deshalb nicht, dass der Fehler in dem Teil meines Progs zu suchen ist, der unabhängig vom RTF-Feld ist. Also mache ich entweder einen Fehler bei der Einbindung, Registrierung oder Anwendung des comatebasierten Feldes oder aber der Laden läuft auf XP nicht korrekt, weil bislang alle "Testkandidaten" eben dieses Betriebssystem besaßen. Das halte ich allerdings für ziemlich hanebüchen, also ist es die Anwendung der Comate-Technik, die ursächlich dafür ist, dass ich den Kram nicht übertragen kann.

//EDIT: Ich betone ANWENDUNG, nicht die Technik selbst!

Verfasst: 21.11.2008 15:50
von Kiffi
bitte mal folgendes auf Deinem Rechner, auf Deinem Laptop und auf dem
Rechner Deines Bekannten ausprobieren (den Include-Pfad vom COMate
vorher anpassen):

Code: Alles auswählen

IncludePath #PB_Compiler_Home + "comate\"
XIncludeFile "COMate.pbi"

RTF_Feld.COMateObject

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 200, "RICHTEXT.RichtextCtrl - Demo") And CreateGadgetList(WindowID(0))
  
  RTF_Feld = COMate_CreateActiveXControl(0, 0, 200, 200, "RICHTEXT.RichtextCtrl")
  
  If RTF_Feld 
    
    RTF_Feld\SetProperty("Text = 'Hallo, ich bin ein RTF_Feld'")
    
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
    
    RTF_Feld\Release()
    
  Else
    
    MessageRequester("!", "Konnte RICHTEXT.RichtextCtrl nicht erstellen!")
    
  EndIf
  
  CloseWindow(0)
  
EndIf
Grüße ... Kiffi