Thomas Krumbein wrote:
> Hey,
>
> I am working on a project, in which I display embedded
graphics of a
> writer-document in a dialog.
>
> With some help of this list (spezial thanks to Fernand
) I
can now
> show the embedded graphics dirct on the dialog.
>
> I use for this the following code:
>
> REM URL des Bildes auslesen
> oBild = oDoc.getGraphicObjects().getByName(sName)
> sBildURL = Mid(oBild.GraphicURL, 28,
len(oBild.GraphicURL))
> REM Bild aus Datei als Objekt laden
> for i = 0 to uBound(aBildNamen())
> if InStr(1, aBildNamen(i), sBildURL, 0) then
> oVorschauGrafik =
>
getGraphFromStream(oPictures.getByName(aBildNamen(i)).getInp
utStream())
> exit For
> end if
> next
> REM Porportionfaktor Laden
> nProp =
>
oVorschauGrafik.sizepixel.width/oVorschauGrafik.sizepixel.he
ight ' < 1
> = Hochkant, >1 -Querformat, = 1 Quadrat
>
> ' oRenderer =
createUnoService("com.sun.star.graphic.GraphicRendererV
CL")
> Dim sRect as new com.sun.star.awt.Rectangle
> sRect.X = 335
> sRect.Y = 40
> sRect.Width = 150
> sRect.Height = 150
> if nProp < 1 then 'Hochkant
> sRect.Width = 150 * nProp
> sRect.X = 335 + (150 - sRect.Width)/2
> elseif nProp > 1 then 'Querformat
> sRect.Height = 150 / nProp
> sRect.Y = 40 + (150 - sRect.Height)/2
> end if
>
> oPaintListener =
CreateUnoListener("MyDialog_",
> "com.sun.star.awt.XPaintListener")
>
> oDlg.Peer.addPaintListener( oPaintListener )
>
> oRenderer.Device = oDlg.Peer.createGraphics.Device
> oRenderer.DestinationRect = sRect
> oRenderer.render(oVorschauGrafik)
>
> The renderer is defined in a seperat Part of the
macro:
>
> oRenderer =
createUnoService("com.sun.star.graphic.GraphicRendererV
CL")
>
>
> The Problem is now, that I use the same part of the
dialog to show
> selected graphics. That is no problem, when all
graphics have the same
> size and do not have transparent Pixels. The renderer
will change the
> used Pixels.
>
> But it is a problem, when I read a smaler graphic - or
a transparent
> gif-graphic - then you will see the prior graphic on
not used pixels of
> the rectangular area.
>
> So my question: How can I remove the rendered graphic
from diolog? Or is
> there a posbility, to overwirte the whole area with
the
> background-pixelcolour?
>
/i struggeld also long time to solve this problem
then a clever gui on the forum who learned us to use a peer
dow to
render a graphic, found also the solution:
"invalidate" the window
for "invalidating" there are several way's
depending on what part of the
window hes to been refresched .OO uses rheir famous
constants for it (I
uses "2" ) who works fine
gives you dialog a unique name as "dialog1" and
uses thisi code:
oWin =GetWindowOpen("Dialog1") 'the titel of
the dialog must be
"Dialog1'
oWin.invalidate(2) ' 2 works fine but there are other
constants ans
combinations posibla
function GetWindowOpen(sTitle as String) as Object
oToolkit = Stardesktop.ActiveFrame.ContainerWindow.Toolkit
lCount = oToolkit.TopWindowCount
' xray otoolkit
for k=0 to lCount -1
oWin = oToolkit.getTopWindow(k)
if HasUnoInterfaces(oWin,
"com.sun.star.awt.XDialog") then
if left(oWin.Title, len(sTitle)) = sTitle then '
GetWindowOpen = oWin
exit function
endif
endif
next k
end function
hope it helps
Fernand
/
> "
> Thanks or your help
>
> Thomas
>
>
>
------------------------------------------------------------
---------
To unsubscribe, e-mail: dev-unsubscribe api.openoffice.org
For additional commands, e-mail: dev-help api.openoffice.org
|