[ ERLEDIGT ] EditorGadget richtig formatieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

[ ERLEDIGT ] EditorGadget richtig formatieren

Beitrag von udg »

Frage:
Gibt es eine Möglichkeit festzulegen, dass die Textformatierung mit STRG+V, von einem WebGadget so ins EditorGadget eingefügt wird, dass die Schriftfarbe und Formatierung des vordefinierten EditorGadgets erhalten bleibt?
Denn wenn ich zB. ein dunkelblaues EditorGadget mit weißer Schrift habe wird diese dann durch STRG+V nicht weiß sondern schwarz eingefügt :shock: :(

wenn ich Text mit STRG+C im WebGadget kopiere und mit STRG+V im EditorGadget einfüge wird die Schrift immer "schwarz" und nicht im vordefinierten Format des EditorGadgets eingefügt.
Tue ich es mit rechtsklick Maus im EditorGadget über das Kontextmenü - einfügen, passiert dies nicht und es wird alles korrekt eingefügt. Auch wenn ich über einen Button mit Funktion:

Code: Alles auswählen

SetGadgetText(1, GetClipboardText())
einfüge funktioniert das.

Wo besteht der Unterschied zu STRG+C & STRG+V?

EditorGadget Code:

Code: Alles auswählen

EditorGadget(1, 43, 150, 623, 250, #PB_Editor_WordWrap)
SetGadgetText(1, "Text mit STRG+V einfügen")
SetGadgetColor(1, #PB_Gadget_FrontColor, RGB(193, 0, 85));TEXT FARBE

Wenn ich zB. das EditorGadget durch ein StringGadget ersetz, geht es. Hier ist jedoch das Problem, langer Text benötigt einen vertikalen Scrollbalken.
Habe ich eingefügt. Funktioniert ebenfalls. Hier wiederum stört, dass der Vertikale Scrollbalken immer angezeigt wird, auch wenn das StringGadgert noch leer ist. Kann man in diesem Fall einstellen, dass der Scrollbalken erst eingeblendet wird wenn der Text länger als das StringGadget wird? So wie es beim EditorGadget der Fall ist.

der StringGadget Code wäre dieser:

Code: Alles auswählen

StringGadget(1, 43, 150, 623, 250,"Text mit STRG+V einfügen", #ES_MULTILINE|#ESB_DISABLE_BOTH|#WS_VSCROLL|#PB_String_BorderLess)
SetGadgetColor(1, #PB_Gadget_FrontColor, RGB(193, 0, 85));TEXT FARBE
Seit 2 Tagen probiere ich mich schon, bis jetzt ohne wirklichen Erfolg ;(
Zuletzt geändert von udg am 17.12.2015 17:59, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Frage: EditorGadget richtig formatieren

Beitrag von Derren »

Wird mal Zeit für ein Clipboard Include.
Es gibt verschiedene "Arten" von Clipboard Daten. Purebasic kann nur Text und Bilder. Es gibt aber noch RTF, HTML und was weiß ich alles. Das wird eben von diversen Controls/Gadgets interpretiert.
Anscheinend ziemlich fehlerhaft. Hätte gedacht, dass die HTML-Formatierunt übernommen wird, aber es sieht so aus, als würde der IE einfach die Standard-Font und Schriftfarbe (Times New Roman, schwarz) verwenden.

Hier ist ein wirklich dirty Work-Around. Macht aus dem fies formatierten webgadget-Text einen plain Text ohne Formatierung, so dass die Formatierung des Editorgadgets angewendet wird:

Code: Alles auswählen

e = WaitWindowEvent()
If e=#PB_Event_Gadget And EventGadget()=#Editor And EventType()=#PB_EventType_Focus 
    If GetClipboardImage(#PB_Any)=0
        SetClipboardText(GetClipboardText())
    EndIf 
EndIf 
edit: noch schnell GetClipboardImage(#PB_Any)=0 eingfügt. Ansonsten wird ein Bild in der Zwischenablage überschrieben. Es gibt aber leider noch mehr Arten, z.B. Dateien (wenn man sie im Explorer kopieren will). Diese Daten werden dann leider gelöscht. Wie gesagt, nur ein quick n dirty workaround. Vlt. gibt's mit API eine elegantere Lösung
Signatur und so
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage: EditorGadget richtig formatieren

Beitrag von udg »

Danke für deine weitere Unterstützung. Sehr nett.
Ich bekomme es dennoch nicht zum einwandfreien funktioniern. Text bleibt (Times New Roman, schwarz) .

Zum Mäusemelken.
Hier nochmal der komplette Code:

EDIT:
Änderungen eingefügt - läuft

Code: Alles auswählen

;
; Windows 7 ( win8 und win 10 ? )
; PureBasic v 5.3
; 
; WINDOWS ONLY
;
; öffnet Rahmenlose Fenster. Fenster 1 mit EditorGadget
; Fenster 2 WebGadget
;
; beide Fenster können nun unabhängig voneinander bewegt
; werden. kopieren von Text im WebGadget und einfügen
; im EditorGadget nun möglich
;
; STRG+C und STRG+V hinzugefügt
; aktuelle URL wird beim Browsen angezeigt
;
; Formatierung des EditorGadget beim einfügen mit STRG+V bleibt nun
; erhalten. Danke an Derren (http://www.purebasic.fr/german)
;
; Ich bin mir nicht 100% sicher ob alles wirklich Bug frei
; läuft. Danke für Verbesserungen. Bis jetzt war kein Absturz
; zu verzeichnen.
;
; Das WebGadget unterstützt HTML 5
;
; Line: 346 --> WebGadget UPDATE auf IE 11
; RegCreateKeyValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", GetFilePart(ProgramFilename()), "11001", #REG_DWORD, ".")
;
Global WebObject.IWebBrowser2

;{ Keyboard Shortcut Enumerations
Enumeration 1
  #OLECMDID_OPEN
  #OLECMDID_NEW
  #OLECMDID_SAVE
  #OLECMDID_SAVEAS
  #OLECMDID_SAVECOPYAS
  #OLECMDID_PRINT
  #OLECMDID_PRINTPREVIEW
  #OLECMDID_PAGESETUP
  #OLECMDID_SPELL
  #OLECMDID_PROPERTIES
  #OLECMDID_CUT
  #OLECMDID_COPY
  #OLECMDID_PASTE
  #OLECMDID_PASTESPECIAL
  #OLECMDID_UNDO
  #OLECMDID_REDO
  #OLECMDID_SELECTALL
  #OLECMDID_CLEARSELECTION
  #OLECMDID_ZOOM
  #OLECMDID_GETZOOMRANGE
  #OLECMDID_UPDATECOMMANDS
  #OLECMDID_REFRESH
  #OLECMDID_STOP
  #OLECMDID_HIDETOOLBARS
  #OLECMDID_SETPROGRESSMAX
  #OLECMDID_SETPROGRESSPOS
  #OLECMDID_SETPROGRESSTEXT
  #OLECMDID_SETTITLE
  #OLECMDID_SETDOWNLOADSTATE
  #OLECMDID_STOPDOWNLOAD
EndEnumeration

Enumeration 0
  #OLECMDEXECOPT_DODEFAULT
  #OLECMDEXECOPT_PROMPTUSER
  #OLECMDEXECOPT_DONTPROMPTUSER
  #OLECMDEXECOPT_SHOWHELP
EndEnumeration
;}
Enumeration
  ;Main Window
    #Window_0
    
  ;PopUp Window aus Prozedur  
    #MainForm

  ; Main Gadgets 
    #Btn_Exit
    #Image_Exit_Normal
    #Image_Exit_Red
    #Editor_Gadget
    #MausArea
    #Font_MausArea
    #Btn_Save
    #Font_Btn_Save
    #Font_Editor_Gadget
    #Btn_OpenBrowserGadget
    
    ;WebGadget
      #WebGadget
      #Btn_CloseWebGadget
      #Font_Btn_CloseWebGadget
      #Btn_Reload
      #Font_Btn_Reload
      #Btn_Nav_Back
      #Font_Btn_Nav_Back
      #Btn_Nav_Frwd
      #Font_Btn_Nav_Frwd
      #Show_Current_Url
      #Font_Current_Url
      #Btn_Start_Browsing
      #Font_Start_Browsing
      #Separater
EndEnumeration

;Included Images
DataSection
  Image_Exit_Normal:
  ; exit_normal.png
  ;{ Size = 328 bytes
  Data.l $474E5089,$0A1A0A0D,$0D000000,$52444849,$22000000,$17000000,$00000208,$3A959601,$0000001D,$59487009,$0E000073,$0E0000C3
  Data.l $6FC701C3,$000064A8,$4449FA00,$9C785441,$FFFFF963,$6012033F,$19B75081,$F9915418,$647970AA,$74582CF5,$06865162,$1DF61450
  Data.l $C0722860,$812C8721,$AC164CCF,$071228A2,$BD9F12FA,$9CEA8864,$50E12E8F,$7E589554,$519B0A3A,$E13BF3AA,$0763C6DE,$76129F1E
  Data.l $2CF41517,$ED344F2B,$4D8AAF9C,$781EA70A,$07A09040,$CF4B200F,$5D1B8740,$2F9624F4,$5A69DF9B,$33A18CBE,$610C4B0A,$00D403D7
  Data.l $3BF3924C,$62CAB0A3,$BCACB3D7,$EEA7BE6D,$4A8CA46D,$11240F58,$5380D560,$A8307E0F,$DE9190F5,$0E86B1C8,$6B708C76,$76F96580
  Data.l $17CF2A89,$E2190B6D,$11D5A3E7,$C1C6B454,$1B7B75D7,$D7310ED0,$20EC122A,$D9601ACD,$7E3C5BBD,$46507CFE,$912B7A04,$60910F14
  Data.l $C3A7300D,$A287130B,$40DAC4F9,$809435AA,$000D65E1,$754D2247,$528F5DE3,$00000000,$444E4549,$826042AE
  Image_Exit_Normal_End:
  ;}
  Image_Exit_Red:
  ; exit_red.png
  ;{ Size = 326 bytes
  Data.l $474E5089,$0A1A0A0D,$0D000000,$52444849,$22000000,$17000000,$00000208,$3A959601,$0000001D,$59487009,$0E000073,$0E0000C3
  Data.l $6FC701C3,$000064A8,$4449F800,$9C785441,$AEC33963,$580480CE,$03371420,$FE6457C3,$B23CB857,$3A2C167A,$034328B1,$92550A28
  Data.l $C5CCEE19,$812C8721,$AC164CCF,$221228A2,$28706F1B,$D1D13C33,$E3789740,$C57C691F,$A33609E3,$39D59FCE,$781D844F,$5DD84A7C
  Data.l $7323D054,$1D7BC6E5,$A4D8AF8D,$0781EA70,$F07A0904,$0CF4B200,$45D1B874,$CA95F18F,$B43B3AB3,$96AE187B,$C594C79C,$01A807AE
  Data.l $EACF2498,$8F6093B4,$67E595CC,$23710FFB,$7AC25465,$AB008920,$F07A9C06,$87AD4183,$8E46F48C,$63B07435,$2C035B84,$476FC5CB
  Data.l $2E5D54BE,$D67750CF,$ACAD157F,$50BED379,$8ED000FC,$481D2F87,$6B3483B0,$F8B76580,$1CB3BADD,$F4088CA0,$1E293196,$601AC122
  Data.l $70D7874E,$DE35FC6F,$9073AF10,$6EC18126,$B735000D,$24470847,$00009783,$45490000,$42AE444E
  Data.b $60,$82
  Image_Exit_Red_End:
  ;}
EndDataSection

;Image Plugins
  UsePNGImageDecoder()
  
Global Url.s="http://store.steampowered.com"
;{
Procedure RegConvertRegKeyToTopKeyAndKeyName(Key.s)
 
  Shared topKey,KeyName.s
 
  temp.s=StringField(Key,1,"\")
  temp=UCase(temp)
  Select temp
    Case "HKEY_CLASSES_ROOT"
      topKey=#HKEY_CLASSES_ROOT
    Case "HKEY_CURRENT_USER"
      topKey=#HKEY_CURRENT_USER
    Case "HKEY_LOCAL_MACHINE"
      topKey=#HKEY_LOCAL_MACHINE
    Case "HKEY_USERS"
      topKey=#HKEY_USERS
    Case "HKEY_CURRENT_CONFIG"
      topKey=#HKEY_CURRENT_CONFIG
  EndSelect
 
  PositionSlash=FindString(Key,"\",1)
  KeyName.s=Right(Key,(Len(Key)-PositionSlash))
 
EndProcedure

ProcedureDLL RegSetValue(Key.s, ValueName.s, Value.s, Type, ComputerName.s) ; Sets a Value
 
  ;Type can be #REG_SZ / #REG_DWORD / #REG_BINARY / #REG_EXPAND_SZ
  ;For REG_BINARY type use Hexa value as String
  ;Returns 1 if successful or 0 if it fails
 
  Shared RegWow64.l,RegEx,topKey,KeyName.s
  RegConvertRegKeyToTopKeyAndKeyName(Key)
 
  If ComputerName = "."
    If RegEx
      GetHandle = RegOpenKeyEx_(topKey,KeyName,0,#KEY_ALL_ACCESS|RegWow64,@hKey)
    Else
      GetHandle = RegOpenKey_(topKey,KeyName,@hKey)
    EndIf
  Else
    lReturnCode = RegConnectRegistry_(ComputerName,topKey,@lhRemoteRegistry)
    If RegEx
      GetHandle = RegOpenKeyEx_(lhRemoteRegistry,KeyName,0,#KEY_ALL_ACCESS|RegWow64,@hKey)
    Else
      GetHandle = RegOpenKey_(lhRemoteRegistry,KeyName,@hKey)
    EndIf
  EndIf
 
  If GetHandle = #ERROR_SUCCESS
    lpcbData = 255
    lpData.s = Space(255)
   
    Select Type
       
      Case #REG_EXPAND_SZ
        GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_EXPAND_SZ, @Value, Len(Value) + 1)
       
      Case #REG_SZ
        GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_SZ, @Value, Len(Value) + 1)
       
      Case #REG_DWORD
        lValue = Val(Value)
        GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_DWORD, @lValue, 4)
       
      Case #REG_BINARY
        LenBuffer=Len(Value)/2
        *RegBuffer=AllocateMemory(LenBuffer)
        For n=0 To LenBuffer-1
          OctetHexa.s=Mid(Value,(n*2)+1,2)
          Octet=Val("$"+OctetHexa)
          PokeB(*RegBuffer+n,Octet)
        Next
        GetHandle= RegSetValueEx_(hKey,ValueName,0,#REG_BINARY,*RegBuffer,LenBuffer)
        FreeMemory(*RegBuffer)
       
    EndSelect
   
    RegCloseKey_(hKey)
    ergebnis = 1
    ProcedureReturn ergebnis
  Else
    RegCloseKey_(hKey)
    ergebnis = 0
    ProcedureReturn ergebnis
  EndIf
EndProcedure

ProcedureDLL RegCreateKey(Key.s, ComputerName.s)
 
  ;It create subkey if KeyPath don't exist
  ;Returns 1 if successful or 0 if it fails
 
  Shared RegWow64.l,RegEx,topKey,KeyName.s
 
  RegConvertRegKeyToTopKeyAndKeyName(Key) 
  lpSecurityAttributes.SECURITY_ATTRIBUTEs
 
  If ComputerName = "."
    If RegEx
      GetHandle = RegCreateKeyEx_(topKey,KeyName,0,0,#REG_OPTION_NON_VOLATILE,#KEY_ALL_ACCESS|RegWow64,@lpSecurityAttributes,@hNewKey,@GetHandle)
    Else
      GetHandle = RegCreateKey_(topKey,KeyName,@hNewKey)
    EndIf
  Else
    lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
    If RegEx
      GetHandle = RegCreateKeyEx_(lhRemoteRegistry,KeyName,0,0,#REG_OPTION_NON_VOLATILE,#KEY_ALL_ACCESS|RegWow64,@lpSecurityAttributes,@hNewKey,@GetHandle)
    Else
      GetHandle = RegCreateKey_(lhRemoteRegistry,KeyName,@hNewKey)
    EndIf
  EndIf
 
  If GetHandle = #ERROR_SUCCESS
    GetHandle = RegCloseKey_(hNewKey)
    CreateKey = #True
  Else
    CreateKey = #False
  EndIf
  ProcedureReturn CreateKey
EndProcedure

ProcedureDLL RegCreateKeyValue(Key.s,ValueName.s,Value.s,Type,ComputerName.s) ; Creates a Key and a Value in a Single Command
 
  ;Type can be #REG_SZ or #REG_DWORD
  ;Returns 1 if successful or 0 if it fails
 
  RegCreateKey(Key,ComputerName)
  ProcedureReturn RegSetValue(Key,ValueName,Value,Type,ComputerName)
EndProcedure
;- Read current URL
Procedure NavigationCallback(Gadget, NewUrl.s)
   
  If NewUrl <> Url
    SetGadgetText(#Show_Current_Url, NewUrl)
    Url = NewUrl 
  EndIf
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure MainFormShow()
  OpenWindow(#MainForm, 0, 0, 1024, 768,"WebGadget HTML5 compatible",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
  SetWindowColor(#MainForm, RGB(48, 103, 140))
  
  StringGadget(#Show_Current_Url, 130, 5, 500, 20, Url, #PB_String_BorderLess)
    SetGadgetColor(#Show_Current_Url, #PB_Gadget_FrontColor, RGB(243, 225, 208));TEXT FARBE
    SetGadgetColor(#Show_Current_Url, #PB_Gadget_BackColor, RGB(31, 77, 106)) ;TEXT Hintergrund FARBE
    SetGadgetFont(#Show_Current_Url, LoadFont(#Font_Current_Url, "Lucida", 10, #PB_Font_HighQuality)) ; Button Font
    
   WebGadget(#WebGadget, 0, 30, 1024, 768, url)   

  ;- Keyboard Shortcuts hinzufügen
     WebObject.IWebBrowser2 = GetWindowLongPtr_(GadgetID(#WebGadget),#GWLP_USERDATA)
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_X,Asc("x"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_C,Asc("c"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_V,Asc("v"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_A,Asc("a"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_Z,Asc("z"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_Y,Asc("y"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_Shift|#PB_Shortcut_Z,Asc("y"))
     AddKeyboardShortcut(#MainForm, #PB_Shortcut_Return,Asc("Return"))
     SetGadgetAttribute(#WebGadget, #PB_Web_NavigationCallback, @NavigationCallback())
     
  ;- Btn Back
     TextGadget(#Btn_Nav_Back, 0, 4, 30, 20, "<",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_Nav_Back, LoadFont(#Font_Btn_Nav_Back, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_Nav_Back, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_Nav_Back, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
      
  ;- Separator
     TextGadget(#Separater, 31, 8, 1, 14, "")
      SetGadgetColor(#Separater, #PB_Gadget_BackColor, RGB(31, 77, 106)) ;TEXT Hintergrund FARBE  
      
  ;- Btn Forward
     TextGadget(#Btn_Nav_Frwd, 32, 4, 30, 20, ">",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_Nav_Frwd, LoadFont(#Font_Btn_Nav_Frwd, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_Nav_Frwd, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_Nav_Frwd, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
     
  ;- Btn Reload
     TextGadget(#Btn_Reload, 60, 4, 60, 20, "refresh",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_Reload, LoadFont(#Font_Btn_Reload, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_Reload, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_Reload, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
      
  ;- Btn Start Browsing 
     TextGadget(#Btn_Start_Browsing, 635, 4, 20, 20, ">>",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_Start_Browsing, LoadFont(#Font_Start_Browsing, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_Start_Browsing, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_Start_Browsing, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
      
        
  ;- Btn Close WEbGadget Window
     TextGadget(#Btn_CloseWebGadget, 948, 4, 60, 20, "close",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_CloseWebGadget, LoadFont(#Font_Btn_CloseWebGadget, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_CloseWebGadget, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_CloseWebGadget, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
  
       WebObject\put_Silent(#True)
       WebObject\put_Left(#Editor_Gadget)
 
EndProcedure

Procedure Start()
  RegCreateKeyValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", GetFilePart(ProgramFilename()), "11001", #REG_DWORD, ".")
  MainFormShow() 
EndProcedure
;}

; Kontextmenü für Editorgadget
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
  Protected result = #PB_ProcessPureBasicEvents
  Select uMsg
    Case #WM_CONTEXTMENU
      If GadgetID(#Editor_Gadget) = wParam
        DisplayPopupMenu(#Editor_Gadget, WindowID(#Window_0))
      EndIf
       
    ;- Beide Fenster unabhängig voneinander mit Maus verschieben   
       Case #WM_LBUTTONDOWN
           SendMessage_(hWnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
  EndSelect  
  ProcedureReturn result
EndProcedure

OpenWindow(#Window_0, 298, 150, 710, 535, "",#PB_Window_BorderLess);| #PB_Window_ScreenCentered
SetWindowColor(#Window_0, RGB(219, 219, 219))

; EXIT BUTTON NORMAL AND HOVER
  Define Exit_Normal = CatchImage(#Image_Exit_Normal, ?Image_Exit_Normal, ?Image_Exit_Normal_End - ?Image_Exit_Normal)
  Define Exit_Red = CatchImage(#Image_Exit_Red, ?Image_Exit_Red, ?Image_Exit_Red_End - ?Image_Exit_Red)
    br = ImageWidth(#Image_Exit_Normal)
    hh = ImageHeight(#Image_Exit_Red)
    ;  POSITION WEHRE TO PLACE ON SCREEN  
       CanvasGadget(#Btn_Exit, 676, -2, br, hh) 
       SetGadgetAttribute(#Btn_Exit, #PB_Canvas_Image, ImageID(#Image_Exit_Normal))
    
; Button WebGadget
  ButtonGadget(#Btn_OpenBrowserGadget, 300, 50, 100, 50, "open Browser",#BS_FLAT)

; Button Speichern
  TextGadget(#Btn_Save, 300, 440, 100, 50, "Text speichern",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)  
    SetGadgetFont(#Btn_Save, LoadFont(#Font_Btn_Save, "Lucida", 8, #PB_Font_HighQuality)) ; Button Font
    SetGadgetColor(#Btn_Save, #PB_Gadget_BackColor, RGB(178, 183, 184))  ;TEXT Hintergrund FARBE
    SetGadgetColor(#Btn_Save, #PB_Gadget_FrontColor, RGB(0, 0, 0));TEXT FARBE
    
; Editor Gadget    
  EditorGadget(#Editor_Gadget, 43, 150, 623, 250, #PB_Editor_WordWrap);,#PB_Editor_WordWrap
    SetGadgetText(#Editor_Gadget, "kopierten Website Text hier einfügen")
    SetGadgetFont(#Editor_Gadget, LoadFont(#Font_Editor_Gadget, "Lucida", 10, #PB_Font_HighQuality)) ; Button Font
    SetGadgetColor(#Editor_Gadget, #PB_Gadget_FrontColor, RGB(193, 0, 85));TEXT FARBE
  ; Entferne Rahmen um EditorGadget (Eingabefeld)
      SetWindowTheme_(GadgetID(#Editor_Gadget), @"", @"")
      SetWindowLongPtr_(GadgetID(#Editor_Gadget), #GWL_EXSTYLE, 0)
      SetWindowPos_(GadgetID(#Editor_Gadget), 0, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_FRAMECHANGED)
  
; Maus Area
  TextGadget(#MausArea, 0, 0, 676, 21, "   Haupt Fenster",#SS_CENTERIMAGE) ;x;y;länge;höhe,$340 = Value for Text Set vertically align
    SetGadgetColor(#MausArea, #PB_Gadget_FrontColor, RGB(246, 246, 246)) ;TEXT FARBE
    SetGadgetColor(#MausArea, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
    SetGadgetFont(#MausArea, LoadFont(#Font_MausArea, "Arial", 10, #PB_Font_HighQuality)) ; Button Font  
    
;- KontextMenü für EditorGadget deklarieren
      If CreatePopupMenu(#Editor_Gadget)
        MenuItem(1, "einfügen")
      EndIf
      SetWindowCallback(@WinCallback()) 
      
 
Repeat
  Event = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType = EventType()

   ; Kontextmenü auf Editorgadget freischalten
      Select event
          Case #PB_Event_Menu
            Select EventMenu()
              Case 1
                SetGadgetText(#Editor_Gadget,GetClipboardText())
            EndSelect
      EndSelect
      
    ;Inhalt aus EditorGadget in Datei speichern  
      If Event=#PB_Event_Gadget
        If EventGadget()= #Btn_Save
          ; Eingabe auslesen
            Text$= GetGadgetText(#Editor_Gadget)
            
          ; Speicherdialog aufrufen  
            File$=SaveFileRequester("Text speichern", "C:\info.txt ", "TXT FILE(*.txt)|*.txt", 0)   
            
          ; schreibe Datei  
            If CreateFile(1, File$)
               WriteStringN(1,Text$, #PB_Ascii)
               CloseFile(1)
            EndIf  
        EndIf    
     EndIf
     
;- Button Funktionen    
  If Event = #PB_Event_Gadget
    Select EventGadget()
          
      ;- BTN WebGadget
          Case #Btn_OpenBrowserGadget
          Start()

      ;- BTN CloseWebGadget     
          Case #Btn_CloseWebGadget
            UpdateWindow_(WindowID(#Window_0))
            CloseWindow(#MainForm)
            
      ;- Web Navigation - Back - Forward - Reload 
          Case #Btn_Nav_Back
            SetGadgetState(#WebGadget, #PB_Web_Back)
          Case #Btn_Nav_Frwd
            SetGadgetState(#WebGadget, #PB_Web_Forward)
          Case #Btn_Reload
            SetGadgetState(#WebGadget, #PB_Web_Refresh)
          Case #Btn_Start_Browsing
            SetGadgetText(#Webgadget, GetGadgetText(#Show_Current_Url))
      ;- FUNKTION EXIT BUTTON    
          Case #Btn_Exit                 
            Select eventtype
              Case #PB_EventType_MouseEnter
                SetGadgetAttribute(#Btn_Exit, #PB_Canvas_Image, ImageID(#Image_Exit_Red))
                 Case #PB_EventType_MouseLeave
                   SetGadgetAttribute(#Btn_Exit, #PB_Canvas_Image, ImageID(#Image_Exit_Normal))
                   ;PROGRAM EXIT, IF CLICK ON EXIT BUTTON
                      Case #PB_EventType_LeftButtonDown
                      ;CLOSE ALL  
                        End
            EndSelect
        EndSelect
  EndIf

 ; KeyboardShortcuts
    Select Event
        
 ;-Begin Workaround für correctes Einfügen durch STRG+V ins EditorGadget
    ;dickes Danke an Derren       
     Case #PB_Event_Gadget
        If EventGadget()=#Editor_Gadget And EventType()=#PB_EventType_Focus
           If GetClipboardImage(#PB_Any)=0
             SetClipboardText(GetClipboardText())
          EndIf
       EndIf
;-End Workaround    
       
      Case #PB_Event_Menu
        Select EventMenu()
          Case 'x'
            WebObject\ExecWB(#OLECMDID_CUT,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
            
          Case 'c'
            WebObject\ExecWB(#OLECMDID_COPY,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
            
          Case 'v'
           SetGadgetText(#Editor_Gadget,GetClipboardText())
            
          Case 'a'
            WebObject\ExecWB(#OLECMDID_SELECTALL,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
            
          Case 'z'
            WebObject\ExecWB(#OLECMDID_UNDO,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
            
          Case 'y'
            WebObject\ExecWB(#OLECMDID_REDO,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
      EndSelect
    EndSelect  
 
  Until IsWindow(#Window_0)=0 And IsWindow(Fenster_ID)=0
Zuletzt geändert von udg am 17.12.2015 17:57, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Frage: EditorGadget richtig formatieren

Beitrag von Derren »

Code: Alles auswählen

 Select Event
;-Begin Workaround
  	Case #PB_Event_Gadget 
  		If EventGadget()=#Editor_Gadget And EventType()=#PB_EventType_Focus 
  			If GetClipboardImage(#PB_Any)=0
    			SetClipboardText(GetClipboardText())
    		EndIf 
    	EndIf 
;-End Workaround  		
      Case #PB_Event_Menu
Signatur und so
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage: EditorGadget richtig formatieren

Beitrag von udg »

@Derren

großes Danke. Ich hoffe ich kann Dir auch irgendwie mal helfen. Grafik, Design, Musik, Paintings, Spende ?


viele Grüße und danke an alle Helfer
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten