Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Richtext-Box

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jacques_de



Anmeldungsdatum: 17.12.2015
Beiträge: 6
Wohnort: Erlangen

BeitragVerfasst am: 17.12.2015, 12:25    Titel: Richtext-Box Antworten mit Zitat

Mein erster Versuch mit Freebasic, (GUI auf der Basis des Templates DialogApp.tpl -nur ein Schließ-Button- mit FbEdit) klappt erwartungsgemäss.

Sobald eine Richtext-Box angefügt wird (zusammen mit "#Include win/richedit.bi") zeigt der Compiler keinen Fehler an, das Programm startet, zeigt aber keine GUI mehr und beendet sich sofort. Identisches Verhalten, wenn in der Eingabeaufforderung gestartet.
Die Richtextbox wurde nur angefügt, im Message-handling noch gar nicht angesprochen.
Was mache ich falsch? Hat jemand ein kleines Beispiel, wie es funktioniert?
Vielen Dank in voraus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 17.12.2015, 15:50    Titel: Re: Richtext-Box Antworten mit Zitat

Jacques_de hat Folgendes geschrieben:
Die Richtextbox wurde nur angefügt, im Message-handling noch gar nicht angesprochen.

Daran wird's vermutlich liegen, hast du denn überhaupt schon die für Richtext-Felder benötigte Bibliothek eingebunden?

Code:
LoadLibrary("Msftedit.dll");

Vor Erzeugung das Fensters aufrufen.

Hier gibt es noch mehr Infos dazu.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jacques_de



Anmeldungsdatum: 17.12.2015
Beiträge: 6
Wohnort: Erlangen

BeitragVerfasst am: 18.12.2015, 12:05    Titel: Richeditbox Antworten mit Zitat

Vielen Dank für den Tipp!
Der GUI-Editor FbEdit lädt eine Version 2.0a vom Control, so habe ich an Stelle von Msftedit.dll die Lib Riched20.dll geladen. Jetzt erscheint die GUI mit der Richeditbox.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jacques_de



Anmeldungsdatum: 17.12.2015
Beiträge: 6
Wohnort: Erlangen

BeitragVerfasst am: 18.12.2015, 19:14    Titel: EM_STREAMIN Antworten mit Zitat

Habe weitgehend das Beispiel RAEdit.bas verwendet, um eine Datei in die Richtextbox einzulesen:
Callback-Routine
Code:
Function StreamIn(ByVal hFile As HANDLE,ByVal pBuffer As ZString Ptr,ByVal NumBytes As Long,ByVal pBytesRead As Long Ptr) As Boolean
Return ReadFile(hFile,pBuffer,NumBytes,pBytesRead,0) Xor 1
End Function

Aufruf:
Code:
Dim editstream As EDITSTREAM
hFile=CreateFile(lpFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
   If hFile<>INVALID_HANDLE_VALUE Then
'       Stream in the text
      editstream.dwCookie=Cast(Integer,hFile)
      editstream.pfnCallback=Cast(Any Ptr,@StreamIn)
SendMessage(hWin,EM_STREAMIN,SF_RTF,Cast(Integer,@editstream))
      MessageBox(0,Str(editstream.dwError),"Stream Errorcode",MB_OK)
CloseHandle(hFile)

Es funktioniert soweit, der Puffer der StreamIn-Routine ist gefüllt, jedoch wird nach SendMessage der Errorcode &h80030070 zurückgegeben und es werden nur die erste 16 Bytes der Datei in die Editbox geschrieben.
Irgendwas mache ich noch falsch!

Hat jemand einen Tipp? Wo finde ich diese Fehlercodes?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.12.2015, 22:05    Titel: Antworten mit Zitat

In den COM-APIs heißt das wohl Disk Full. Macht nur begrenzt Sinn in diesem Kontext. Was auf jeden Fall fehlt und eventuell damit zusammenhängt: Deine Callback-Funktion muss STDCALL als Calling Convention haben, wie jede Funktion die von der WinAPI aufgerufen wird. Ansonsten enthalten die an die Funktion übergebene Parameter falsche Werte, d.h. ReadFile wird vmtl fehlschlagen.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jacques_de



Anmeldungsdatum: 17.12.2015
Beiträge: 6
Wohnort: Erlangen

BeitragVerfasst am: 19.12.2015, 11:42    Titel: EM_STREAMIN Antworten mit Zitat

Es freut mich sehr, dass so schnell so tiefgründige Antworten kommen. Vielen Dank. Ich hatte befürchtet, dass die Community nicht mehr so aktiv sei.

Zum Problem: Ich hatte dem Aufruf von Readfile eine boolsche Rückgabevariable vorgesetzt, um zu sehen, ob pBuffer gefüllt ist, was zutrifft.
In der Beschreibung von EM_STREAMIN wird erklärt, dass der Puffer aus Readfile in Portionen übertragen wird, solange er nicht leer ist. Da ich immer nur die ersten 16 Bytes erhalte, vermute ich, dass dieser Mechanismus nur einmal tut, warum auch immer.

Aber ich werde mich erst einmal in das "Wesen" der CallBack-Funktionen vertiefen. Der Umstieg aus VB.Net ist schwer!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jacques_de



Anmeldungsdatum: 17.12.2015
Beiträge: 6
Wohnort: Erlangen

BeitragVerfasst am: 19.12.2015, 17:24    Titel: EM_STREAMIN: Problem "gelöst" Antworten mit Zitat

Aua!
Das hat man davon, Beispiele abzutippen, ohne darauf zu achten, was sich hinter jeder Zeile verbirgt.

Das geschilderte Problem hat sich per Zufall erledigt: als ich die Editbox mit einem längeren Text vorbelegen wollte, sah ich eben nur die ersten 16 Zeichen davon!

Eine Zeile zuviel:
Code:
SendDlgItemMessage(hWin,IDC_RED1,EM_LIMITTEXT,16,0)
hat nichts besseres zu tun ..., als die Puffergröße des Controls zu limitieren.

mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen

Ich möchte mich für die unüberlegte Frage entschuldigen, aber für die guten Ratschläge bedanken, die mich immerhin dazu gebracht haben, mich näher mit der Materie zu befassen.

Der Fehlercode "Disk full" behält doch irgendwie seine Richtigkeit: Hier war der Puffer frühzeitig voll!

Ich wäre trotz allem sehr daran interessiert, wo man die Bedeutung der Fehlercodes finden kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 20.12.2015, 03:30    Titel: Antworten mit Zitat

In diesem Fall bin ich mir auch nicht ganz sicher, wo der Fehlercode ermittelt werden kann, weil es kein Standard-Fehlercode ist, aber im Allgemeinen kann man mit GetLastError einen Fehlercode erhalten und mit FormatMessage diesen auch in einen String (mit Fehlerbeschreibung) ausgeben lassen. FormatMessage lässt sich eventuell auch auf die Fehlermeldung hier anwenden, wenn man das richtige Modul zum Übersetzen der Meldung angibt. Mehr steht dazu in der MSDN, wo du einen Großteil der Antworten auf deine Fragen zur Windows-Programmierung mittels WinAPI findest.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jacques_de



Anmeldungsdatum: 17.12.2015
Beiträge: 6
Wohnort: Erlangen

BeitragVerfasst am: 20.12.2015, 19:39    Titel: Antworten mit Zitat

FormatMessage funktioniert tatsächlich tadellos. Vielen Dank nochmal.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz