Seite 1 von 1

ListIcon + WebGadget

Verfasst: 10.09.2010 09:57
von H.Brill
Hallo,
Ich suche eine Möglichkeit, ein ListIcon über
ein WebGadget auszudrucken, kenne mich aber
in HTML nicht so aus.
Am besten wäre eine Procedure, die die GadgetID()
vom ListIcon entgegen nimmt und daraus eine einfache
HTML-Tabelle mit Spaltenüberschriften und Inhalt generiert.

Hat jemand schon sowas gemacht oder gesehen ?

PS:
Das Drucken des Webgadgets habe ich schon bei
PureArea.net gefunden.

Re: ListIcon + WebGadget

Verfasst: 10.09.2010 10:21
von Kiffi
so in etwa:

Code: Alles auswählen

EnableExplicit

Enumeration
  #myWindow
EndEnumeration
Enumeration
  #myListIconGadget
  #myWebGadget
EndEnumeration

Procedure CountListiconColumn(gadget, maxcolumn, keyword.s)
  
  ; Marco2007:
  ; http://www.purebasic.fr/english/viewtopic.php?p=310714#p310714
  
  Protected ColCounter
  If IsGadget(gadget)
    AddGadgetColumn(gadget, maxcolumn, keyword, 0)
    For ColCounter = 0 To maxcolumn
      If GetGadgetItemText(gadget, -1, ColCounter) = keyword
        Break
      EndIf    
    Next
    RemoveGadgetColumn(gadget, ColCounter)
    ProcedureReturn ColCounter
  EndIf
  
EndProcedure

Procedure ListIconGadgetToWebGadget(ListIconGadgetId, WebGadgetId)
  
  Protected CountColumns, CountRows
  Protected RowCounter, ColCounter
  Protected HTML.s
  
  CountColumns = CountListiconColumn(ListIconGadgetId, 255, "uniquekeyword0815") - 1
  
  CountRows = CountGadgetItems(ListIconGadgetId) - 1
  
  HTML = "<html><body><table border='1'>"
  
  HTML + "<tr>"
  For ColCounter = 0 To CountColumns
    HTML + "<th>" + GetGadgetItemText(ListIconGadgetId, -1, ColCounter) + "</th>"
  Next
  HTML + "</tr>"
  
  
  For RowCounter = 0 To CountRows
    HTML + "<tr>"
    For ColCounter = 0 To CountColumns
      HTML + "<td>" + GetGadgetItemText(ListIconGadgetId, RowCounter, ColCounter) + "</td>"
    Next
    HTML + "</tr>"
  Next
  
  HTML + "</table></body></html>"
  
  SetGadgetItemText(WebGadgetId, #PB_Web_HtmlCode, HTML)
  
EndProcedure

Define RowCounter, ColCounter
Define Line.s

OpenWindow(#myWindow, #PB_Any, #PB_Any, 800, 615, "")

ListIconGadget(#myListIconGadget, 5, 5, 790, 300, "column1", 60)

; Beispielcolumns erzeugen

For ColCounter = 2 To 10
  AddGadgetColumn(#myListIconGadget, ColCounter - 1, "column" + Str(Colcounter), 60)
Next

; Beispielzeilen erzeugen

For RowCounter = 1 To 20
  Line = ""
  For ColCounter=1 To 10
    Line + Str(RowCounter) + "\" + Str(ColCounter)
    If ColCounter < 10
      Line + #LF$
    EndIf
  Next
  AddGadgetItem(#myListIconGadget, -1, Line)
Next

WebGadget(#myWebGadget, 5, 310, 790, 300, "")

ListIconGadgetToWebGadget(#myListIconGadget, #myWebGadget)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Grüße ... Kiffi

Re: ListIcon + WebGadget

Verfasst: 10.09.2010 12:01
von H.Brill
Danke,
fast schon perfekt.

Wenn ich EnableExplicit eingeschaltet habe,
kommt bei dieser Zeile eine Fehlermeldung

Code: Alles auswählen

WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(#myWebGadget), #GWL_USERDATA)
Wie muß ich denn WebObject.IWebBrowser2 definieren ?

Code: Alles auswählen

;EnableExplicit

Enumeration
  #myWindow
EndEnumeration
Enumeration
  #myListIconGadget
  #myWebGadget
EndEnumeration

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 

Procedure CountListiconColumn(gadget, maxcolumn, keyword.s)
  
  ; Marco2007:
  ; http://www.purebasic.fr/english/viewtopic.php?p=310714#p310714
  
  Protected ColCounter
  If IsGadget(gadget)
    AddGadgetColumn(gadget, maxcolumn, keyword, 0)
    For ColCounter = 0 To maxcolumn
      If GetGadgetItemText(gadget, -1, ColCounter) = keyword
        Break
      EndIf    
    Next
    RemoveGadgetColumn(gadget, ColCounter)
    ProcedureReturn ColCounter
  EndIf
  
EndProcedure

Procedure ListIconGadgetToWebGadget(ListIconGadgetId, WebGadgetId)
  
  Protected CountColumns, CountRows
  Protected RowCounter, ColCounter
  Protected HTML.s
  
  CountColumns = CountListiconColumn(ListIconGadgetId, 255, "uniquekeyword0815") - 1
  
  CountRows = CountGadgetItems(ListIconGadgetId) - 1
  
  HTML = "<html><body><table border='1'>"
  
  HTML + "<tr>"
  For ColCounter = 0 To CountColumns
    HTML + "<th>" + GetGadgetItemText(ListIconGadgetId, -1, ColCounter) + "</th>"
  Next
  HTML + "</tr>"
  
  
  For RowCounter = 0 To CountRows
    HTML + "<tr>"
    For ColCounter = 0 To CountColumns
      HTML + "<td>" + GetGadgetItemText(ListIconGadgetId, RowCounter, ColCounter) + "</td>"
    Next
    HTML + "</tr>"
  Next
  
  HTML + "</table></body></html>"
  
  SetGadgetItemText(WebGadgetId, #PB_Web_HtmlCode, HTML)
  
EndProcedure

Define RowCounter, ColCounter
Define Line.s
#Button = 2

OpenWindow(#myWindow, #PB_Any, #PB_Any, 800, 615, "")
ButtonGadget(#Button, 10, 10, 60, 20, "Print") 
ListIconGadget(#myListIconGadget, 5, 35, 790, 250, "column1", 60)

; Beispielcolumns erzeugen

For ColCounter = 2 To 10
  AddGadgetColumn(#myListIconGadget, ColCounter - 1, "column" + Str(Colcounter), 60)
Next

; Beispielzeilen erzeugen

For RowCounter = 1 To 20
  Line = ""
  For ColCounter=1 To 10
    Line + Str(RowCounter) + "\" + Str(ColCounter)
    If ColCounter < 10
      Line + #LF$
    EndIf
  Next
  AddGadgetItem(#myListIconGadget, -1, Line)
Next

WebGadget(#myWebGadget, 5, 330, 790, 300, "")
WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(#myWebGadget), #GWL_USERDATA)
ListIconGadgetToWebGadget(#myListIconGadget, #myWebGadget)

Repeat
  Event = WaitWindowEvent() 
  If Event = #PB_Event_Gadget And EventGadget() = #Button 
    
    ; Send the Print Command to the WebGadget: 
    
    WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_PROMPTUSER, 0, 0) 
    
    ; using #OLECMDEXECOPT_DONTPROMPTUSER as second argument will print without 
    ; the printrequester. 
    
    
  EndIf 
Until WaitWindowEvent() = #PB_Event_CloseWindow


Re: ListIcon + WebGadget

Verfasst: 10.09.2010 12:31
von Kiffi
H.Brill hat geschrieben:Wie muß ich denn WebObject.IWebBrowser2 definieren ?

Code: Alles auswählen

Define WebObject.IWebBrowser2
Grüße ... Kiffi

Re: ListIcon + WebGadget

Verfasst: 10.09.2010 13:27
von H.Brill
Danke, paßt.
vorläufig letzte Frage zur Perfektion :

Könnte man beim Erstellen des HTML-Gadgets
die Breite der einzelnen Spalten des Listicongadgets
mit berücksichtigen ?
Also, wenn ich unterschiedlich breite Spalten habe,
daß diese auch im Webgadget so dargestellt werden ?

Weiß nicht, ob das Table-Tag sowas hergibt.

Re: ListIcon + WebGadget

Verfasst: 10.09.2010 13:36
von STARGÅTE
Mit
Breite = GetGadgetItemAttribute(#Gadget, Eintrag, #PB_ListIcon_ColumnWidth , Spalte)
kannst du die einzelne Spaltenbreite des ListIconGadgets ermitteln.
Dieser Wert kann dann einfach in den Kopf der Tabellen

Code: Alles auswählen

  HTML + "<tr>"
  For ColCounter = 0 To CountColumns
    Breite = GetGadgetItemAttribute(ListIconGadgetId, -1, #PB_ListIcon_ColumnWidth, ColCounter)
    HTML + "<th width="+Str(Breite)+">" + GetGadgetItemText(ListIconGadgetId, -1, ColCounter) + "</th>"
  Next
  HTML + "</tr>"
ggf. noch etwas vergrößern je nach Schriftart ...

Re: ListIcon + WebGadget

Verfasst: 10.09.2010 17:38
von H.Brill
Danke euch beiden, es funktioniert.