Zwischenablage mit Text und Bildern wie Iexplore

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Zwischenablage mit Text und Bildern wie Iexplore

Beitrag von Max_der_Held »

hallo volks :)
ich mache gerade schnell wieder für die schule ein Programm zur Berechnung der Standardabweichung Sigma. jetzt ist ziemlich alles fertig (die sigmaberechnung wird als bild [sogar mit autozeilenumbruch mhm ;) ] in die zwischenablage kopiert; die mittelwertsberechnung soll aber als Textvorliegen!!

und hier liegt das Problem:

wie kann ich Text UND bild in die zwischenablage werfen, so dass word das lesen kann?
[siehe z.b. internet explorer, wenn man die google.de seite kopiert und dann in word einfügt --> bilder, text, buttons links.. alles da.. aber wie?]
[[ dann könnte ich diese stumpfsinnige sinnlose allwöchentliche hausi schön mit einem klick abwiegeln (bis auf mittelwert geht das jetzt auch schon hehe) ]]

lg und danke
max
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Zwischenablage mit Text und Bildern wie Iexplore

Beitrag von bobobo »

dein beispiel funktioniert aber auch nur mit dem blöden IE (der dafür vermutlich (mal wieder) 80 eigentlich
eherne Sicherheitsgesetze umgeht) (vermutlicht nutzt das ms-zeug da irgendwelche activex-dinger für)

mit einem browser (Opera z.B.) funktioniert sowas nicht

gleichzeitig wirst du das so per pb nicht oder nur sehr aufwändig über die zwischenablage hinbekommen.

druck ??

pdf-drucker gibts reichlicherweise (washammdenhier .. bullZip z.b.) und im PDF liegen die Inhalt
ja eigentlich getrennt vor .. pdf 2 doc converter gibt es auch ..
das wäre soviel klickerei uznd getue drumrum, da kannst du dann gleich die zwischenablage einmal
mit text und danach mit dem Bild bestücken.

oder anders

mach das mit dem Text über die Zwischenablage allerdings in eine vorher per Makro gepimpte
WordVorlage. die kann ein Bild per knopfdruck oder schon beim Laden von selber einlesen wenn
der pfad und der bildname fix ist.
So ein Makro ist in word flott zusammengeklickt.
Wenn es autonew heisst und in der Vorlage enthalten ist kannst Du so in Word (ich hab hier nur
2000er Word) mit öffnen der Vorlage das BIld automatich einlesen und aktuellen Text aus der
Zwischenablage.
was soll's ..hier das Makro (Bildpfad und Name anpassen)

Code: Alles auswählen

Sub AutoNew()
'
' lademaldasbild Makro
' Makro aufgezeichnet am 12.02.2010 von bobobo
'
    Selection.InlineShapes.AddPicture FileName:= _
        "C:\Eigene Dateien\Eigene Bilder\!DerSchreck.jpg", LinkToFile:=False, _
        SaveWithDocument:=True
    Selection.TypeParagraph
    Selection.Paste
End Sub
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Zwischenablage mit Text und Bildern wie Iexplore

Beitrag von Max_der_Held »

hhiijja... neeein.. vielleicht
die sache is die
ich will das ding dann für ca.4€ verkaufen.. (erstmal 5€ hehe :) )
also die technikzweige hier an der schule zumindest verstehen großenteils die fehlerrechnung nicht muhaha :)
aber dafür kann ich denen schlecht sagen "jetzt erstmal das skript drauf".. "installier pdf-creator"..
sollja so einfach wie möglich sein, hier..(im notfall mach ich einfach alles planar zunem bild.)

[Xd ich nehm auch opera und das hat mich bei die bahnverbindungen immer aufgeregt, dass nur iexplore die als tabelle kopiert.. oder excel/ppt, die können das ja auch .. evtl ein böses monopol..]
ich such mich mal noch bisschen durch googel derweil..
lg
schönes faschingsdingens :)
-max
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Zwischenablage mit Text und Bildern wie Iexplore

Beitrag von Kaeru Gaman »

Max_der_Held hat geschrieben:wie kann ich Text UND bild in die zwischenablage werfen, so dass word das lesen kann?
hast du selber kein Word?
dann würd ichs nämlich schlicht als .doc speichern.
auch OpenOffice gibt es.

weiterhin kannst du auch in einem Verzeichnis ein HTM erstellen, und dort direkt bilder einbilden, die im selben Verzeichnis liegen, das kann mit jedem Browser gelesen werden.

... aber wahrscheinlich versteh ich grad dein Problem überhaupt nicht ...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Zwischenablage mit Text und Bildern wie Iexplore

Beitrag von Kiffi »

Max_der_Held hat geschrieben:wie kann ich Text UND bild in die zwischenablage werfen, so dass word das lesen kann?
mit COMate ein Word-Dokument erzeugen, Dein Zeug da einfügen,
dann von Deinem Word-Objekt aus alles in die Zwischenablage
kopieren (.Selection.Copy()). Fertig.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Zwischenablage mit Text und Bildern wie Iexplore

Beitrag von Max_der_Held »

@Kaeru: ich kanns schlecht schon getestet haben, wenn ich kein word hätte :)
aber da das ganze eingefügt werden soll (es sind da dann schon haufenweise Seiten über den Versuch etc. geschrieben) kann ich schlecht ein komplett neues word-dokument machen lassen... zumindest wäre das für den benutzer schon wieder umständlicher.
@kiffi: ok, schau ich mir gleich mal an hier ^^ nur hoffe ich dass das nicht wieder darauf hinausläuft dass der benutzer makros einbinden muss oder dergleichen.. die zielgruppe könnte teilweise nicht einmal einen screenshot machen, geschweige denn makros einbinden..
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Zwischenablage mit Text und Bildern wie Iexplore

Beitrag von Kiffi »

Max_der_Held hat geschrieben:nur hoffe ich dass das nicht wieder darauf hinausläuft dass der benutzer makros einbinden muss
wenn Du es richtig machst, dann muss der Anwender nur das Knöppsche drücken ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Zwischenablage mit Text und Bildern wie Iexplore

Beitrag von Max_der_Held »

also, ich hab das ding heruntergeladen, und *puh^^ *
damit lässt sich EINIGES machen hehe :)
hab davon schonmal irgendwo gehört... (Bist du da Mitentwickler, Kiffi? sauber o.O :) )

aber.. dann hab ich noch bisschen mehr nach mit google das pureboard durchsucht (und siehe da.. google findet, was die forensuche versteckt..)

unser purebasic-clipboard unterstützt ja kein setclipboarddata mehr etc. das geht jetzt alles per API.. Das Läuft dann praktisch anstatt von "text" oder "bild" als "html" im clipboard, womit pb (noch) nichts anfangen kann..

die Lösung steht auf HIER:

Code: Alles auswählen

Global m_cfHTMLClipFormat.l , EOL$
EOL$ = Chr(13)+Chr(10)  
#CP_UTF8=65001

Procedure.l RegisterCF()
  If m_cfHTMLClipFormat=0
    m_cfHTMLClipFormat=RegisterClipboardFormat_("HTML Format")
  EndIf
  ProcedureReturn m_cfHTMLClipFormat
EndProcedure

Procedure PutHTMLClipboard(sHtmlFragment.s)
  If RegisterCF()=0
    ProcedureReturn
  EndIf
  *out = AllocateMemory(Len(sHtmlFragment)*5+2) 
  l = MultiByteToWideChar_(#CP_ACP,0,@sHtmlFragment,-1,0,0) 
  l = MultiByteToWideChar_(#CP_ACP,0,@sHtmlFragment,-1,*out,l) 
  l = WideCharToMultiByte_(#CP_UTF8,0,*out,-1,0,0,0,0) 
  out2.s = Space(l) 
  l = WideCharToMultiByte_(#CP_UTF8,0,*out,-1,@out2,l,0,0) 
  sHtmlFragment.s=out2
  m_sDescription.s = "Version:1.0"+EOL$+"StartHTML:aaaaaaaaaa"+EOL$+"EndHTML:bbbbbbbbbb"+EOL$+"StartFragment:cccccccccc"+EOL$+"EndFragment:dddddddddd"+EOL$
  sContextStart.s="<HTML><BODY>"+"<!--StartFragment -->"
  sContextEnd.s="<!--EndFragment -->"+"</BODY></HTML>"
  sData.s = m_sDescription.s + sContextStart + sHtmlFragment + sContextEnd
  sData.s = ReplaceString(sData, "aaaaaaaaaa", RSet(StrU(Len(m_sDescription),#PB_Long), 10, "0"))
  sData.s = ReplaceString(sData, "bbbbbbbbbb", RSet(StrU(Len(sData),#PB_Long), 10, "0"))
  sData.s = ReplaceString(sData, "cccccccccc", RSet(StrU(Len(m_sDescription+sContextStart),#PB_Long), 10, "0"))
  sData.s = ReplaceString(sData, "dddddddddd",RSet(StrU(Len(m_sDescription+sContextStart+sHtmlFragment),#PB_Long), 10, "0"))
  Debug sData
  OpenClipboard_(0)
  *hMemHandle = GlobalAlloc_(0, Len(sData) + 10)
  If *hMemHandle
;    Debug *hMemHandle
    *lpData = GlobalLock_(*hMemHandle)
    If *lpData<>0
;      Debug *lpData
      PokeS(*lpData, sData, Len(sData))
      GlobalUnlock_(*hMemHandle)
      EmptyClipboard_()
      SetClipboardData_(m_cfHTMLClipFormat, *hMemHandle)
    EndIf 
  EndIf
  FreeMemory(*out)
  CloseClipboard_() 
EndProcedure

Procedure.s GetHTMLClipboard()
  If RegisterCF()=0
    ProcedureReturn ""
  EndIf
  OpenClipboard_(0)
  hData=GetClipboardData_(m_cfHTMLClipFormat)
  If hData
    *pData=GlobalLock_(hData)
    If PeekB(hData)
      dwSize=MultiByteToWideChar_(65001,0,*pData,-1,0,0)
      Buf.s=Space(dwSize*2)
      MultiByteToWideChar_(65001,0,*pData,-1,@Buf,dwSize)
      dwSize=WideCharToMultiByte_(0,0,@Buf,-1,0,0,0,0)
      Buf2.s=Space(dwSize)
      WideCharToMultiByte_(0,0,@Buf,-1,@Buf2,dwSize,0,0)
      Debug Buf2
      Ret1=FindString(Buf2,"<!--StartFragment",0)
      Ret1=FindString(Buf2,">",Ret1)+1
      If PeekB(@Buf2+Ret1-1)=$0D
        Ret1=Ret1+2
      EndIf
      Ret2=FindString(Buf2,"<!--EndFragment",Ret1)
      GetHTMLClipboardS.s=Mid(Buf2,Ret1,Ret2-Ret1)
    EndIf
    GlobalUnlock_(hData)
  Else
    GetHTMLClipboardS.s=""
  EndIf
  CloseClipboard_() 
  ProcedureReturn GetHTMLClipboardS.s
EndProcedure

A$=GetHTMLClipboard()
;Debug A$
Delay(1000)
PutHTMLClipboard(A$)
Delay(2000)
End

ist aber noch nicht gesagt, dass das alles bei mir hinhaut..
werd mir aber auch diese com-sache genauer anschaun hehe:) ^^ network,excel,word,flash,activeX, Sendkeys (wobei letzeres gerade mein pb geschlossen hat...... so ein sackteil^^ :) )
danke für den Tipp, kiffi :)
gn8
-max

[Edit]
so, mal eben in word ein paar text-und bild dateien nebeneinandergesetzt und kopiert (3und 3)
das ganze dann per pb in text umgewandelt und (dank stargate und AND21's hilfe) wieder als html-kopiert..
das sieht dann als 1-zeilen-befehl so aus: (zum bildersehen müssen die pfade ganz am ende des codes ausgetauscht werden..)

Code: Alles auswählen

PutHTMLClipboard("<p class=MsoNormal>3<span style='mso-fareast-language:DE;mso-no-proof:yes'><!--[if gte vml 1]><v:shapetype" + Chr(10) + " id=" + Chr(34) + "_x0000_t75" + Chr(34) + " coordsize=" + Chr(34) + "21600,21600" + Chr(34) + " o:spt=" + Chr(34) + "75" + Chr(34) + " o:preferrelative=" + Chr(34) + "t" + Chr(34) + Chr(10) + " Path=" + Chr(34) + "m@4@5l@4@11@9@11@9@5xe" + Chr(34) + " filled=" + Chr(34) + "f" + Chr(34) + " stroked=" + Chr(34) + "f" + Chr(34) + ">" + Chr(10) + " <v:stroke joinstyle=" + Chr(34) + "miter" + Chr(34) + "/>" + Chr(10) + " <v:formulas>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "if lineDrawn pixelLineWidth 0" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "sum @0 1 0" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "sum 0 0 @1" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "prod @2 1 2" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "prod @3 21600 pixelWidth" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "prod @3 21600 pixelHeight" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "sum @0 0 1" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "prod @6 1 2" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "prod @7 21600 pixelWidth" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "sum @8 21600 0" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "prod @7 21600 pixelHeight" + Chr(34) + "/>" + Chr(10) + "  <v:f eqn=" + Chr(34) + "sum @10 21600 0" + Chr(34) + "/>" + Chr(10) + " </v:formulas>" + Chr(10) + " <v:Path o:extrusionok=" + Chr(34) + "f" + Chr(34) + " gradientshapeok=" + Chr(34) + "t" + Chr(34) + " o:connecttype=" + Chr(34) + "rect" + Chr(34) + "/>" + Chr(10) + " <o:lock v:ext=" + Chr(34) + "edit" + Chr(34) + " aspectratio=" + Chr(34) + "t" + Chr(34) + "/>" + Chr(10) + "</v:shapetype><v:shape id=" + Chr(34) + "_x0000_i1027" + Chr(34) + " type=" + Chr(34) + "#_x0000_t75" + Chr(34) + " style='width:20.25pt;" + Chr(10) + " height:13.5pt;visibility:visible;mso-wrap-style:square'>" + Chr(10) + " <v:imagedata src=" + Chr(34) + "file:///C:\Users\KRIEGE~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" + Chr(34) + "" + Chr(10) + "  o:title=" + Chr(34) + "" + Chr(34) + "/>" + Chr(10) + "</v:shape><![endif]--><![if !vml]><img width=34 height=22" + Chr(10) + "src=" + Chr(34) + "file:///C:\Users\KRIEGE~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.jpg" + Chr(34) + "" + Chr(10) + "v:shapes=" + Chr(34) + "_x0000_i1027" + Chr(34) + "><![endif]></span>+3<span style='mso-fareast-language:" + Chr(10) + "DE;mso-no-proof:yes'><!--[if gte vml 1]><v:shape id=" + Chr(34) + "_x0000_i1026" + Chr(34) + " type=" + Chr(34) + "#_x0000_t75" + Chr(34) + "" + Chr(10) + " style='width:20.25pt;height:13.5pt;visibility:visible;mso-wrap-style:square'>" + Chr(10) + " <v:imagedata src=" + Chr(34) + "file:///C:\Users\KRIEGE~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" + Chr(34) + "" + Chr(10) + "  o:title=" + Chr(34) + "" + Chr(34) + "/>" + Chr(10) + "</v:shape><![endif]--><![if !vml]><img width=34 height=22" + Chr(10) + "src=" + Chr(34) + "file:///C:\Users\KRIEGE~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.jpg" + Chr(34) + "" + Chr(10) + "v:shapes=" + Chr(34) + "_x0000_i1026" + Chr(34) + "><![endif]></span>=23<span style='mso-fareast-language:" + Chr(10) + "DE;mso-no-proof:yes'><!--[if gte vml 1]><v:shape id=" + Chr(34) + "Bild_x0020_85" + Chr(34) + " o:spid=" + Chr(34) + "_x0000_i1025" + Chr(34) + "" + Chr(10) + " type=" + Chr(34) + "#_x0000_t75" + Chr(34) + " style='width:20.25pt;height:13.5pt;visibility:visible;" + Chr(10) + " mso-wrap-style:square'>" + Chr(10) + " <v:imagedata src=" + Chr(34) + "file:///C:\Users\KRIEGE~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" + Chr(34) + "" + Chr(10) + "  o:title=" + Chr(34) + "" + Chr(34) + "/>" + Chr(10) + "</v:shape><![endif]--><![if !vml]><img width=34 height=22" + Chr(10) + "src=" + Chr(34) + "file:///C:\Users\KRIEGE~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.jpg" + Chr(34) + "" + Chr(10) + "v:shapes=" + Chr(34) + "Bild_x0020_85" + Chr(34) + "><![endif]></span></p>"  )

.. und das für 3 zeichen und 3 bilder... respekt..(ok, aber man sieht ja was sonst alles noch drin ist..)
und es geht :)
mann bin ich stolz.. auf mich, auf pb und auf euch, danke für die Help :)
lg
max
Antworten