Seite 1 von 2

Kein Multiline für Editorgadget - andere (kürzere) Lösung?

Verfasst: 04.11.2007 20:31
von CNESM
Hi Leute,

in der Vergangenheit habe ich öfters mal ein einzeiliges Editorgadget benötigt, was ich stets in etwa wie folgt umgesetzt habe:

Code: Alles auswählen

  If OpenWindow(0,0,0,322,150,"EditorGadget_NoMultiline",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    CreateGadgetList(WindowID(0))
    EditorGadget(1,8,8,306,133)
    AddGadgetItem(1,-1, "Teststring")
    
    AddKeyboardShortcut(0,#PB_Shortcut_Control|#PB_Shortcut_C,1)
    AddKeyboardShortcut(0,#PB_Shortcut_Control|#PB_Shortcut_X,2)
    AddKeyboardShortcut(0,#PB_Shortcut_Control|#PB_Shortcut_V,3)
    AddKeyboardShortcut(0,#PB_Shortcut_Return,4)
 
    Repeat
      Select WaitWindowEvent() 
        Case #PB_Event_Menu
          If EventMenu()=1
            SendMessage_(GadgetID(1),#EM_GETSEL,@SelStart,@SelEnd)
            selText$=Space(SelEnd-SelStart) 
            SendMessage_(GadgetID(1),#EM_GETSELTEXT,0,@SelText$)
            SetClipboardText(SelText$)
          ElseIf EventMenu()=2
            SendMessage_(GadgetID(1),#WM_CUT,0,0)
            SelText$=GetClipboardText()
            SetClipboardText(SelText$)
          ElseIf EventMenu()=3
            If FindString(GetClipboardText(),Chr(13)+Chr(10),1)=0
              SetGadgetText(1,GetClipboardText())
            Else
              SetGadgetText(1,Mid(GetClipboardText(),1,FindString(GetClipboardText(), Chr(13)+Chr(10) ,1) -1))
            EndIf
          ElseIf EventMenu()=4
          EndIf
     EndSelect
    Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf
Irgdendwie bin ich erst jetzt auf die Idee gekommen, mal nachzufragen, obs dafür nicht ne einfache und vielleicht sogar kürzere Variante (Stichwort: Sendmessage) gibt? Hab vergleichbares noch nicht entdecken können.

Danke euch und noch einen schönen Sonntag Abend bei "Hitch - Der Date Doktor" :D

Verfasst: 04.11.2007 20:46
von DarkDragon
SetWindowLong_(GadgetID(#Editor), #GWL_STYLE, GetWindowLong_(GadgetID(#Editor), #GWL_STYLE) - #ES_MULTILINE)

Probier das mal (Kann es momentan nicht testen, da Linux, sollte aber im idealfall klappen, denn sowohl beim EDIT Control als auch bei einem Rich Edit Control gibt es das Flag #ES_MULTILINE laut MSDN ).

Verfasst: 04.11.2007 21:48
von RSBasic
Du willst ja kein MultiLine für dein Gadget haben.
Ne kürzere Variante gibt es.
Du kannst ja StringGadget nehmen
Und vergrößerst einfach die Höhe des Gadgets, dann sieht es aus wie ein EditorGadget.

Code: Alles auswählen

If OpenWindow(0,0,0,500,500,"Windows-Vorlage",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
  If CreateGadgetList(WindowID(0)) 
    StringGadget(1,10,10,480,480,"",0) 
  EndIf 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf 

Verfasst: 05.11.2007 14:47
von CNESM
@DarkDragon

Hat bei mir keine Auswirkung auf den Style des Editors :cry:

@RSBasic

Nen Stringgadget kommt für meine Fälle nicht in Frage .....

Verfasst: 05.11.2007 16:54
von edel
Es muesste "& ~#ES_MULTILINE" heissen.

Verfasst: 05.11.2007 17:13
von CNESM
@edel

Hast du das mal getestet?

Code: Alles auswählen

SetWindowLong_(GadgetID(0), #GWL_STYLE, GetWindowLong_(GadgetID(0), #GWL_STYLE) & ~#ES_MULTILINE)
Hat bei mir ebenfalls keine Auswirkung :|

Verfasst: 05.11.2007 18:32
von Fluid Byte
Die Multiline-Eigenschaft lässt sich nicht deaktivieren. Du musst ein über API erstelltes EditorGadget benutzen.

Code: Alles auswählen

OpenLibrary(0,"RICHED20")

OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

dwStyle = #WS_CHILD | #WS_VISIBLE | #ES_AUTOHSCROLL | #WS_HSCROLL
hwndRichEdit = CreateWindowEx_(#WS_EX_CLIENTEDGE,"RICHEDIT20A",0,dwStyle,0,0,320,240,WindowID(0),0,0,0)
SendMessage_(hwndRichEdit,#WM_SETFONT,GetStockObject_(#DEFAULT_GUI_FONT),1)

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend

Verfasst: 06.11.2007 09:54
von CNESM
Danke für die Info, Fluid Byte!

Das sind ehrlich gesagt wieder so Dinge, die ich nicht nachvollziehen kann. Ein Stringgadget kann ich Einzeilig oder Multiline machen, aber nen Editorgadget geht nur Multiline :freak:

Verfasst: 06.11.2007 13:52
von Fluid Byte
CNESM hat geschrieben:Das sind ehrlich gesagt wieder so Dinge, die ich nicht nachvollziehen kann. Ein Stringgadget kann ich Einzeilig oder Multiline machen, aber nen Editorgadget geht nur Multiline :freak:
Das ist so nicht ganz richtig. Das liegt einzig an PureBasic und wie es das Gadget erstellt. Ein per API erstelltes RichEdit Gadget verfügt über keine Multiline-Eigenschaft sofern nicht explizit per Window-Style angegeben.

Für RichEdit und Standard Edit Controls gilt:

Das Hinzufügen und Entfernen der Multiline-Eigenschaft nach der erstmaligen Erstellung erfordert das Löschen und die Neu-Erstellung des Gadgets mit bzw. ohne #ES_MULTILINE Stil.

Verfasst: 06.11.2007 14:36
von CNESM
Dann soll Fred das gefälligst ändern :mrgreen: *EinOptinalesMultilineHabenWill*

Code: Alles auswählen

SetGadgetAttribute(0,#PB_Editor_Multiline,1) ;(0 bedeutet Einzeilig, 1 bedeutet Multiline)
Klar habe ich die Möglichkeit, mir ein eigenes zu bauen, aber ist das der Sinn der Sache? Dann brauchen wir überhaupt keine Libraries für Gadgets ..... :(