Seite 1 von 2

Frage zur EditorGadget

Verfasst: 20.09.2010 20:44
von marcelx
Hallo,
ich verwende EditorGadget für Texteingabe und möchte ein scrollen vertikal zulassen und ein horizontal verbieten.
Gibt es ein flag dafür (mit F1 habe ich kein gesehen)?
Ich möchte, dass bei Texteingabe ein Verhalten wie z.B. andere Text-Editor bei denen zulange Text in eine neue Zeile geschrieben wird a la Word oder OpenOffice.

Danke für ein Hinweis.
Gruß
Marcelx

Re: Frage zur EditorGadget

Verfasst: 20.09.2010 21:01
von Rebon
Es gibt eine Möglichkeit über API für Zeilenumbruch.

Code: Alles auswählen

SendMessage_(GadgetID(0), #EM_SETTARGETDEVICE, #Null, #True) ;#True oder 1 für an, #False oder 0 für aus 

Re: Frage zur EditorGadget

Verfasst: 20.09.2010 21:04
von marcelx
Wunderbar, das kann ich gleich ausprobieren.
Frage:
ist es Windows-spezial ?
über SendMessage_ habe ich im Forum schon gelesen, wo gibt es Doku dazu ?
Danke

Re: Frage zur EditorGadget

Verfasst: 20.09.2010 21:09
von ts-soft
marcelx hat geschrieben:Wunderbar, das kann ich gleich ausprobieren.
Frage:
ist es Windows-spezial ?
Ja, es handelt sich um Windows-API, das heißt unter Linux oder MacOS wird es so nicht funktionieren!
marcelx hat geschrieben: über SendMessage_ habe ich im Forum schon gelesen, wo gibt es Doku dazu ?
Danke
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

oder http://www.realsource.de/index.php/down ... indows-sdk
wobei dann noch das aktuelle SDK von Microsoft zu installieren ist.
(aktuell: http://www.microsoft.com/downloads/en/d ... laylang=en )

Gruß
Thomas

Re: Frage zur EditorGadget

Verfasst: 20.09.2010 21:14
von marcelx
Super, so funktioniert.
Danke für die schnelle Antwort

Gruß
Marcelx

Re: Frage zur EditorGadget

Verfasst: 21.09.2010 01:39
von Vera
Hallo,

weil es gut in diesen Thread passt: zu Wordwrap gibt es eine Crossplattform-version von Guimauve und eine Mac-version von Shardik.

Hier erstere mit kleiner Ergänzung für's Menü mit Statusanzeige:

Code: Alles auswählen

Enumeration
  #Menu : #wrap : #edit
EndEnumeration
Global wstate = 1
text.s = Chr(34) +"Hello everyone, This is a small Procedure To Activate Or Deactivate the EditorGadget() wordwrap behaviour. The code work on Windows And Linux. Have Fun ! " +Chr(34) + " - Guimauve"

; <<<<<<<<<<Guimauve<<<<<<<<
Procedure EditWWrap(EditorID.l, State.l)
  
  TextBuffer.s = GetGadgetText(EditorID)
  
  If State = 1
    CompilerSelect #PB_Compiler_OS
      CompilerCase #PB_OS_Windows
        SendMessage_(GadgetID(EditorID), #EM_SETTARGETDEVICE, #Null, 0)
      CompilerCase #PB_OS_Linux
        gtk_text_view_set_wrap_mode_(GadgetID(EditorID), #GTK_WRAP_WORD)
    CompilerEndSelect
    wstate = 0
    SetMenuItemState(#Menu,#wrap,1)
   
  ElseIf State = 0
    CompilerSelect #PB_Compiler_OS
      CompilerCase #PB_OS_Windows
        SendMessage_(GadgetID(EditorID), #EM_SETTARGETDEVICE, #Null, $FFFFFF)
      CompilerCase #PB_OS_Linux
        gtk_text_view_set_wrap_mode_(GadgetID(EditorID), #GTK_WRAP_NONE)
    CompilerEndSelect
    wstate = 1
    SetMenuItemState(#Menu,#wrap,0)
  EndIf
  
  SetGadgetText(EditorID, TextBuffer)
  
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<

If OpenWindow(0, 110, 110, 300, 200, "EditWWrap", #PB_Window_SystemMenu )
  EditorGadget(#edit, 10, 25, 230, 130)
  AddGadgetItem(#edit, -1, text)
  CreateMenu(#Menu, WindowID(0))
  MenuTitle("Menu")
  MenuItem(#wrap," Wrap" +#TAB$ +"F4")
  
  AddKeyboardShortcut(0,#PB_Shortcut_F4,#wrap)

  Repeat
    wwe = WaitWindowEvent()
    Select wwe
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Menu  
        Select EventMenu()  
          Case #wrap : EditWWrap(#edit, wstate)
        EndSelect
    EndSelect
  Until wwe = #PB_Event_CloseWindow
  
EndIf
Grüße ~ Vera

Re: Frage zur EditorGadget

Verfasst: 21.09.2010 13:02
von marcelx
Hallo Vera,

das ist super - das wäre meine nächste Frage gewesen (wie ist es mit Linux?)

Dazu (EditorGadget) habe ich noch zwei Fragen:
- wie schalte ich das vertikal Scrollen aus?
- wie kann ich die Anzahl der Zeilen begrenzen
(Anzahl der eingegeben Zeilen können kleiner/grösser als was in den Fenster passt)?

Danke und Gruß
MarcelX

Re: Frage zur EditorGadget

Verfasst: 21.09.2010 18:09
von Vera
Hallo marcelx,

freut mich :)

Um die Scrollbalken zu de/aktivieren, gibt's auch zwei Win-API Befehle:
SendMessage_(GadgetID(1), #EM_SHOWSCROLLBAR,#SB_HORZ,0) ; 1, bzw. #False / #True
SendMessage_(GadgetID(1), #EM_SHOWSCROLLBAR,#SB_VERT,0)


Die Lösungen für Linux kenne ich leider auch noch nicht. (da muß man mal suchen u. fragen)

siehe: EditorGadget border and scrollbars, darin geht's auch um Zeilenlänge u. Zeilenanzahl.
Hier noch ein weiterer Leckerbissen von Rashad: AutoResize EditorGadget [Windows]

Die Anzahl der Zeilen läßt sich bestimmt begrenzen, bzw. abfangen. Wenn sie aber die Fenstergröße überschreiten, läßt sich der Text auch bei deaktivierter Scrollbar via Mausrad oder Tastatur scrollen. (Mir ist nicht ganz klar, worauf Du abzielst.)

Gruß ~ Vera

Re: Frage zur EditorGadget

Verfasst: 22.09.2010 13:16
von marcelx
Hallo Vera,

erst mal, danke für alle Typs.

Was deine Neugier angeht, komme ich gern nach und versuche den Sinn zur erläutern:
Da kommt ein lange Satz:
Will ich, dass auf eine Seite mehre Eingaben (Radio-Button, .. Text ...) den platz so anlegen, das alles drauf passt,
spare ich an der Höhe von Text-Eingabe-Fenster.
Beim Drucken habe ich z.B. bis max 10 Zeilen vorgesehen für ein bestimmte Texteingabe.
Das bedeutet, dass maximal bis zur 10 Zeilen als Text eingegeben werden darf.
Da im Durchschnitt 5 Zeilen verwendet werden, mache ich die Höhe für 5 Zeilen und, weil es scrollbar ist, begrenze ich die Eingabe auf 10 Zeilen.

Es gibt auch Textfelder für die 2 Zeilen vorgesehen sind. Dann reicht ein EditorGadget für 2 Zeilen und ohne scrollbar EditorGadget.

Ich hoffe, dass es einigermaßen verständlich war.

Gruß,
MarcelX

Re: Frage zur EditorGadget

Verfasst: 22.09.2010 20:09
von Vera
Hi marcelx,

dito - danke :)

Hört sich für mich nach einem ausdruckbarem zB DinA4 Formular an, (so kann ich das zumindest nachvollziehen).

Ich hoffe es klappt, wie Du es Dir vorstellst.

Gruß ~ Vera