WebGadget und Strg C V Delete Tab

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

WebGadget und Strg C V Delete Tab

Beitrag von hjbremer »

Das Strg C und Strg V im WebGadget nicht geht ist echt nervig.

Der einzige Code der dieses Manko behebt, den habe ich im englischen Forum gefunden und der ist von :praise: Sparkie. :praise:

Allerdings gehöre ich zu denen, die diese COM Geschichten in diesem Leben nicht mehr verstehen werden.
Also frag mich bitte keiner WIE, Warum, Weshalb.

Originalcode etwas angepasst.

Code: Alles auswählen

Procedure WebGadgetTasten(pbnr)

Select EventwParam()
  Case #VK_C, #VK_V, #VK_DELETE, #VK_TAB  
     CoInitialize_(0) 
     CoCreateInstance_(?CLSID_IOleInPlaceActiveObject, 0, 1, ?IID_IOleInPlaceActiveObject,@OleObject.IOleInPlaceActiveObject) 
     WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(pbnr), #GWL_USERDATA) 
     WebObject\QueryInterface(?IID_IOleInPlaceActiveObject, @OleObject) 
     web.MSG
     web\message = #WM_KEYDOWN 
     web\wParam  = EventwParam() 
     web\lParam  = EventlParam() 
     OleObject\TranslateAccelerator(@web) 
     OleObject\Release() 
     CoUninitialize_() 
EndSelect

DataSection 
;{00000117-0000-0000-C000-000000000046} 
IID_IOleInPlaceActiveObject: 
Data.l $00000117 
Data.w $0000, $0000 
Data.b $C0, $00, $00, $00, $00, $00, $00, $46 

;{00000320-0000-0000-C000-000000000046} 
CLSID_IOleInPlaceActiveObject: 
Data.l $00000320 
Data.w $0000, $0000 
Data.b $C0, $00, $00, $00, $00, $00, $00, $46 
EndDataSection

EndProcedure

; --------------------------------------------------

#webgadnr = 1

If OpenWindow(0, 0, 0, 700, 500, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar)  
  WebGadget(#webgadnr, 10, 10, 680, 480, "http://www.google.com/") 

  Repeat 
    event = WaitWindowEvent() 
    If event = #WM_KEYDOWN 
     If EventGadget() = #webgadnr 
        WebGadgetTasten(#webgadnr)
     EndIf 
    EndIf 
  Until event = #PB_Event_CloseWindow 

EndIf 

End 

Nur noch eine kleine Bemerkung zur Suchfunktion im neuen Forum: >_< >_< >_<

Edit: Wenn man das Ganze in ein Programm einbaut, kann es sein,
das die Abfrage "If EventGadget() = #webgadnr" wegfallen muß.
Return scheint aber nicht zu funktionieren, falls Return als Shortcut definiert wurde
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
.:M:.
Beiträge: 44
Registriert: 29.07.2008 04:12

Re: WebGadget und Strg C V Delete Tab

Beitrag von .:M:. »

Interessant, funktioniert sehr gut.
Es gibt eine einfachere und OS-unabhängige Möglichkeit, allerdings 'hackt' die manchmal, da GetGadgetItemText(#WebGagdet,#PB_Web_SelectedText)
nicht alles korrekt auslesen kann. Ich glaube es liegt am Javascript oder sonstigen Code im HTML - Ich habe es aber nicht genauer getestet.
Für reinen Text oder einfache Links geht es aber.
(Man sollte es so natürlich nur verwenden wenn man eigenen Code ins Webgadget parst und sicherstellen kann,
daß der selektierte Text auch ausgelesen wird.
Z.B. wenn man das Webgadget als UserInterface nutzt, oder zur Informationsdarstellung.)

Code: Alles auswählen

OpenWindow(0, 0, 0, 806, 606, ".:M:.", #PB_Window_SystemMenu)
WebGadget(1, 3, 3, 800, 600, "www.google.de")
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_C, 007) 
Repeat 
   Select WaitWindowEvent()
      Case #PB_Event_Menu
      Select EventMenu()
         Case 007 : ;*
         ClearClipboard() 
         ClipBoard$=GetGadgetItemText(1,#PB_Web_SelectedText)
         SetClipboardText(ClipBoard$)
      EndSelect
   EndSelect
Until WaitWindowEvent() = #PB_Event_CloseWindow
* Ich muß ein Scherzkeks sein ;-)
PB 5.11 Beta1 32Bit | Win 7 Pro 64Bit
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: WebGadget und Strg C V Delete Tab

Beitrag von Nino »

hjbremer hat geschrieben:Das Strg C und Strg V im WebGadget nicht geht ist echt nervig.

Der einzige Code der dieses Manko behebt, den habe ich im englischen Forum gefunden und der ist von :praise: Sparkie. :praise:

Allerdings gehöre ich zu denen, die diese COM Geschichten in diesem Leben nicht mehr verstehen werden.
Also frag mich bitte keiner WIE, Warum, Weshalb.

Originalcode etwas angepasst.
Ein Link zum Originalcode wäre guter Stil dessen Autor gegenüber -- und man könnte dann bei Bedarf Sparkie auch direkt dazu fragen.

Grüße, Nino
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: WebGadget und Strg C V Delete Tab

Beitrag von Vera »

Nino hat geschrieben:Ein Link zum Originalcode wäre guter Stil
Ein Nachreichen statt Bemängeln, wäre ein guter Teamgeist gegenüber dem Forum und ein Dankeschön an hjbremer, der uns immer wieder an seinen Ergebnissen und Arbeiten teilhaben läßt.

Danke @hjbremer :)

Sparkie's Code ist hier: PB4.10b2 Webgadget, Delete/Ctrl-V etc ignored? (2007)
im Bereich Bug-Reports, wo eh' nicht weiterdiskutiert wird

und eine ähnlich Problemlösung von Sparkie gibt's nochmal hier: Catching the mouse-up on a web gadget? (2004)

Grüße ~ Vera
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: WebGadget und Strg C V Delete Tab

Beitrag von Nino »

Vera hat geschrieben:
Nino hat geschrieben:Ein Link zum Originalcode wäre guter Stil
Nachreichen statt Bemängeln,
Du bist ja putzig. :lol:
Antworten