MemoEdit() Absturz bei Text mit xbeK_TAB

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
DelUser01

MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von DelUser01 »

Hallo

Habe das Problem, dass Text die mit XbpMLE erstellt/verändert wurden von manchen Usern auch noch mit MemoEdit() angezeigt werden (sollen).
Ist in dem Text ein xbeK_TAB enthalten stürzt MemoEdit() ab:

Code: Alles auswählen

oError:description:Interne Datenstrukturen beschädigt
Natürlich kann ich die Tabs vorher in Space umwandeln (das passt von der Tab-Schrittweite sowieso nicht zusammen).
War das schon immer so? Dann habe ich das vergessen...

Vermutlich wird es generell besser sein die Tabs in Space zu wandeln...

Gruß
Roland
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von Wolfgang Ciriack »

Vermutlich wird es generell besser sein die Tabs in Space zu wandeln...
Nur wenn du keine Proportionalschrift verwendest, bei z.b. Arial kannst du Leerzeichen vergessen, du bekommst deine Text nie richtig untereinander dargestellt.
Viele Grüße
Wolfgang
DelUser01

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von DelUser01 »

Hallo Wolfgang

da hast Du recht mit den Schriftarten-Varianten klappt das natürlich nicht einfach nur über Leerzeichen. Deshalb suche ich ja eine andere - vernünftige - Lösung.

Gruß
Roland
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von brandelh »

zeigt MemoEdit() zeigt sowieso nur fixed fonts an. Wenn ich darin TAB drücke springt er einige Zeichen weiter, ob es aber tatsächlich ein chr(9) ist oder nur die Blanks bis zum nächsten Haltepunkt kann ich nicht sagen.
Gruß
Hubert
DelUser01

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von DelUser01 »

Hallo Hubert,

bei MemoEdit() werden so viele Leerzeichen eingefügt wie beim Parameter TAB angegeben werden. Oder man unterdrückt xbeK_TAB ganz bzw. verwendet die Taste anderweitig (z.B. Ende Editiermodus, nächstes Feld).
...wie seit (Clipper) ewigen Zeiten.

Gruß
Roland
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:Habe das Problem, dass Text die mit XbpMLE erstellt/verändert wurden von manchen Usern auch noch mit MemoEdit() angezeigt werden (sollen).
Ist in dem Text ein xbeK_TAB enthalten stürzt MemoEdit() ab:

Code: Alles auswählen

oError:description:Interne Datenstrukturen beschädigt
reden wir hier von Cl*pper oder Xbase++ MemoEdit() ? wird auch von Cl*pper auf die DBT zugegriffen ?
gruss by OHR
Jimmy
DelUser01

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von DelUser01 »

Hallo Jimmy

vielleicht habe ich das falsch beschrieben.
Es geht natürlich um MemoEdit in der der aktuellen XBase++ Compilerversion.
Bin enttäuscht wie wenig im MLE steckt, habe da mehr erwartet. Ist ein besseres MemoEdit mit Proporionalschrift.
Den Rest - sprich "Das Rad" - muss ich jetzt hier wieder neu erfinden...
...UFF! (...um nicht "übel" zu gebrauchen...)

Nun Ja - weiter im Takt - auch diese Erkenntnis nutzt meinen Kunden nichts...

Gruß
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von Tom »

Hallo, Roland.
Bin enttäuscht wie wenig im MLE steckt, habe da mehr erwartet.
Das MLE ist ein Standard-Windows-Control. Das kann von Haus aus nicht sehr viel, fürchte ich.

Wenn man deutlich mehr will, muss man andere Controls verwenden. Beispielsweise das "TX Text Control" als Active-X-Komponente:

www.textcontrol.com
Herzlich,
Tom
DelUser01

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von DelUser01 »

Hallo Tom

"deutlich" mehr will ich gar nicht.
Nur die TABs (zugegeben einer der schwierigen Parts)

Das Einbinden von Drittprodukten behagt mir nicht sehr.
(...mit Ausnahme von APIs der MSDN).

Gruß
Roland
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von brandelh »

Hi,

natürlich kann XbpMLE() einen chr(9) = TAB-Taste ordnungsgemäß verarbeiten :!:
Was "ordnungsgemäß" ist, hängt von einer Einstellung ab :ignoreTab()

Windows nutzt ja normalerweise die TAB-Taste von einem Control zum anderen (wie gesagt WINDOWS !).
Je nach Einstellung ignoriert also XbpMLE() die eingegebenen TABs im Control und springt zum nächsten.
Oder es ignoriert sie nicht und fügt ein TAB-Sprung in den Text ein.
Das ist alles eine Festlegung von Windows und trifft alle Sprachen.

Tab
Wird als Zeichen in den Editierpuffer übertragen, falls :ignoreTab auf .F. gesetzt ist
Was uns von Xbase normalerweise abgenommen wird ist die Einstellung mit sendmessage() (Windows-API)
und leider gibt es keine direkte Einstellung in Xbase++ somit müssten wir - falls möglich - die Windows-API nutzen.

:arrow: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

und dort sollte es das hier sein, aber wie genau ?

:arrow: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

im PowerBasic Forum hat sich das auch schon jemand gefragt ;-)

:arrow: http://www.powerbasic.com/support/pbfor ... ETTABSTOPS

eventuell hat das ja auch schon jemand in der Alaska Newsgroup oder bei Pablo gefragt ...
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von brandelh »

klar doch ;-)

public.xbase++.gui (= p.x.gui) 05.08.2005 16:30 von Robert Major, Antwort von Günter Beyes ... von wem sonst ;-)
Günter Beyes hat geschrieben:Hi Robert,
> How can I set the tab spacings in xbpMLE?
By sending the XbpMLE an EM_SETTABSTOPS message, using the
SendMessage() WinAPI function.
See the attached sample.
---
Regards,
Günter
da war auch ein Anhang (den ich nicht getestet habe):
tabstops.zip
Datei von Günter Beyes
(1.13 KiB) 135-mal heruntergeladen
und noch eine Anmerkung:
By the way, regarding the EM_SETTABSTOPS sample provided above, you may
find that it doesn't work... In that case, pass the 4th parameter to
SendMessage ( i.e. sTabStops ) by reference, and adjust the SendMessage()
wrapper function accordingly. Again a case of copy/paste/edit/break...
Gruß
Hubert
DelUser01

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von DelUser01 »

Hallo Hubert

für die Experimente mit Tab bei MLE muss ich mir mehr Zeit nehmen, das wird nicht einfach. Deshalb habe ich ja schon an anderer Stelle gefragt ob es so etwas wie ein fertiges Editor-Modul mit Tabs gibt welches eingebunden werden kann.
Es muss nichts umfangreiches sein, aber es gibt doch immer wieder Texte die formatierte Tabellen enthalten müssen und da sind Tabs das Mindeste was benötigt wird.

Aber das ursprüngliche Problem hier sind nicht die Tabs im MLE sondern in MemoEdit. da gibt es scheinbar ein Kompatibilitätsproblem.
Bevor ich Text der in MLE (oder Notepad usw.) erstellt wurde und Tabs enthält in MemoEdit anzeige muss ich die Chr( xbeK_TAB ) entfernen sonst stürzt MemoEdit ab.
Zumindest bei mir ist das so.
Auch das wäre ja nicht so schlimm, aber wenn jetzt der Text auch noch in MemoEdit bearbeitet wird muss ich ja eigentlich die Tabs hinterher wieder einfügen. Spätestens da fängt es an lustig zu werden.

Gruß
Roland
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von brandelh »

xbeK_TAB ist die Bezeichnung für einen Event, das Zeichen heißt chr(9) ;-)

Du könntest chr(9) gegen EIN chr(255) und je nach benötigter Anzahl " " tauschen (MLE => MemoEdit).
Die Umkehrung wäre es alle chr(255)+" " => chr(255) tauschen und dann chr(255) nach chr(9).
chr(255) sieht aus wie ein Blank, ist aber natürlich keines.
Gruß
Hubert
DelUser01

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von DelUser01 »

Hallo Hubert

xbeK_TAB hat den Wert 9 und ist mit Chr( xbeK_TAB ) das TAB-Zeichen.
Das Chr(...) habe ich mir nur gespart.
Ob es für TAB ein extra Event gibt? Der heißt dann xbeP_Keyboard.

Das mit dem Zeichentauschen z.B. in Chr(255) wäre schon OK, aber wenn der User drüberschreibt wird ein Space draus und die vorherige Tab-Position ist futsch.

Sonst könnte ich ja gleich in Space tauschen (mache ich gerade sowieso).

Gruß
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von Tom »

Hallo, Roland.

Vielleicht kannst Du mal ein Beispiel bauen und posten, so dass der Fehler nachvollziehbar wird. Ich kann in MLEs Tabs verwenden. Völlig problemlos und fehlerfrei.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von brandelh »

Roland Gentner hat geschrieben: Das mit dem Zeichentauschen z.B. in Chr(255) wäre schon OK, aber wenn der User drüberschreibt wird ein Space draus und die vorherige Tab-Position ist futsch.
Sonst könnte ich ja gleich in Space tauschen (mache ich gerade sowieso).
stimmt, wenn du im Text mehr als ein " " findest, kannst du auf ein TAB schließen, aber das ist auch nicht eindeutig ;-)

Ich frage mich allerdings warum es überhaupt vorkommt, dass alte und neue Technik auf EIN Feld angewendet wird ...
stellen deine Kunden nicht alle Arbeitsplätze gleichzeitig um ?
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von brandelh »

Roland Gentner hat geschrieben: xbeK_TAB hat den Wert 9 und ist mit Chr( xbeK_TAB ) das TAB-Zeichen.
Das Chr(...) habe ich mir nur gespart.
da habe ich mich falsch ausgedrückt, der Event ist der Keyboardevent und dass dieser define 9 ergibt stimmt natürlich auch,
ich wollte eigentlich sagen, dass man sich hier die Tipperei xbe... sparen kann und gleich den code angibt ;-)

Wie auch immer, MEMOEDIT() hat NORMALERWEISE keine Probleme mit TAB Zeichen.
Das folgende Beispiel zeigt, dass beides ohne Probleme (von dem ì abgesehen) zusammen arbeiten können.
Allerdings ist es in dieser Form wahrlich nicht zu empfehlen ;-)

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"

procedure main()
   local oDlg, mp1, mp2, oXbp, cText, oMle, nEvent

   mp1 := mp2 := oXbp := nil
   oDlg := setAppWindow()
   oDlg:SetTitle("Test")

   cText := "Dies ist ein Test" + chr(9) + "von TAB Zeichen"+chr(13)+chr(10)+"Ende"

   @ 0,1 say " F2 = Memoedit, F3 = MLE, Rest Anzeige der Tastaturcodes" COLOR "W+/B"

   cText := MyMemoEdit(cText)


   oMLE := XbpMLE():new(oDlg)
   * oMLE:wordWrap :=.F.
   oMLE:horizScroll := .F.
   oMLE:killInputFocus := {| n1, n, oXbp | cText := oXbp:getData() }

   oMLE:create( , , {50,50}, {400,150} )

   @0,1 say "Text wurde an MLE bergeben ...                     "
   oMLE:setData( cText )
   @0,50 say "und geht gleich weiter ..."

   nEvent := 0                      // Event loop
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp, 0 )

      do case
         case nEvent == xbeK_ESC         // Esc bricht ab
              EXIT
         case nEvent == xbeK_F2          // F2 => Memoedit()
              @0,1 say "Memoedit startet und blockiert ...                  "
              cText := MyMemoEdit(cText)
              @0,1 say "Memoedit ende, Daten an MLE bergeben ....          "
              oMLE:setData( cText )
              setAppFocus(oMLE)
              @0,50 say "und geht gleich weiter ..."

         case nEvent == xbeK_F3
              @0,1 say "Text wurde an MLE bergeben ...                     "
              oMLE:setData( cText )
              setAppFocus(oMLE)
              @0,50 say "und geht gleich weiter ..."

         case nEvent < xbeB_Event    // Ausgabe im Fenster mit Fokus

              ? "Die Taste hat den Ereigniscode:", nEvent

         case oXbp <> NIL            // Ereignis für Pushbutton
              oXbp:handleEvent( nEvent, mp1, mp2 )
      END
   ENDDO

return

function MyMemoEdit(cText)
   @ 1,1 say "Memoedit Strg+W speichern.            chr(9) im Text ? "+iif(chr(9) $ cText,"JA","NEIN") COLOR "W+/B"
   set color to "n/w"
   @ 2,0 TO 11,41 COLOR "N/BG"

   cText := MemoEdit( cText , 3,1,10,40, .T.)
   cls

   @ 1,1 say "Memoedit Ende in die Eventschleife.   chr(9) im Text ? "+iif(chr(9) $ cText,"JA","NEIN")  COLOR "W+/B"
return cText
Vermutlich liegt dein Problem in deiner benutzerdefinierten Funktion ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MemoEdit() Absturz bei Text mit xbeK_TAB

Beitrag von brandelh »

Roland Gentner hat geschrieben:Das Einbinden von Drittprodukten behagt mir nicht sehr.
(...mit Ausnahme von APIs der MSDN).
Solange es um Xbase++ DLLs geht, deren Quellcode man nicht hat, ist das auch gefährlich, wer weiß wie lange support besteht ...

Wenn es aber um Standard-DLLs geht, besteht kein Unterschied zur M$ API, was geht geht, mehr hat niemand versprochen.
Mit OT4XB kann man darauf zugreifen und Sachen wie PDF Erstellung oder richtige XLS Erstellung kann man selbst ohne Fremd-DLL nicht durchführen.

Von Active-X bin ich ja nicht der Freund, aber auch da muss man sagen wenn es funktioniert, was solls.
Bevor ich heute mit MEMOEDIT() eine Textverarbeitung nachbauen (das habe ich auch gemacht und eine läuft auch noch)
oder mich mit dem Aufbohren von XbpMLE() aufhalten würde, wäre ein Control mit dem TOM gute Erfahrungen gemacht hat sicher meine erste Wahl.

Wenn es um Eingabemaskierung beim XbpSLE() geht, da habe ich jede Menge Erfahrung und das funktioniert gut,
da will man meist aber auch keine Schriften, Tabulatoren oder Bilder einbinden etc. ;-)
Gruß
Hubert
Antworten