|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jacques_de
Anmeldungsdatum: 17.12.2015 Beiträge: 6 Wohnort: Erlangen
|
Verfasst am: 17.12.2015, 12:25 Titel: Richtext-Box |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 17.12.2015, 15:50 Titel: Re: Richtext-Box |
|
|
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 |
|
|
Jacques_de
Anmeldungsdatum: 17.12.2015 Beiträge: 6 Wohnort: Erlangen
|
Verfasst am: 18.12.2015, 12:05 Titel: Richeditbox |
|
|
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 |
|
|
Jacques_de
Anmeldungsdatum: 17.12.2015 Beiträge: 6 Wohnort: Erlangen
|
Verfasst am: 18.12.2015, 19:14 Titel: EM_STREAMIN |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.12.2015, 22:05 Titel: |
|
|
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 |
|
|
Jacques_de
Anmeldungsdatum: 17.12.2015 Beiträge: 6 Wohnort: Erlangen
|
Verfasst am: 19.12.2015, 11:42 Titel: EM_STREAMIN |
|
|
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 |
|
|
Jacques_de
Anmeldungsdatum: 17.12.2015 Beiträge: 6 Wohnort: Erlangen
|
Verfasst am: 19.12.2015, 17:24 Titel: EM_STREAMIN: Problem "gelöst" |
|
|
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.
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.12.2015, 03:30 Titel: |
|
|
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 |
|
|
Jacques_de
Anmeldungsdatum: 17.12.2015 Beiträge: 6 Wohnort: Erlangen
|
Verfasst am: 20.12.2015, 19:39 Titel: |
|
|
FormatMessage funktioniert tatsächlich tadellos. Vielen Dank nochmal. |
|
Nach oben |
|
|
|
|
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.
|
|