oIcon:Draw() bei Ownerdraw

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

oIcon:Draw() bei Ownerdraw

Beitrag von AUGE_OHR »

ich frage mich ob das "normal" ist ...

Code: Alles auswählen

oLv:drawItem    := {| oPS, aInfo, oSelf | PureDrawItem(oPS , aInfo, oSelf, aPP)  }

PROCEDURE PureDrawItem(oPS, aInfo, oSelf,aPP)
   ...
   // does not show Icon ?
   //
   // oIcon:draw(oPS,{nXDest,nYDest,16,16})

   // need a Bitmap  ?
   //
   oBMP := oIcon:getBitmap()

   // but bad Result with o:LoadFileIcon ?
   //
   oBMP:draw(oPS,{nXDest,nYDest,16,16})
ich beziehe mich dabei auf die PROCEDURE PrintIcon() welches im Help File unter Icon:draw() angegeben wird.

Es müsste doch gehen da mein oPS dem oPSTmp entspricht ...

Code: Alles auswählen

   ::oBitmap      := DXE_Bitmap():new():create()
   ::oPresspace   := XbpPresSpace():new()
   ::oPresspace:create()
   ::oBitmap:presSpace( ::oPresspace )
   ::oBitmap:make( aSize[1],aSize[2] )
   ...
   EVAL(::drawItem, ::oPresspace , aInfo , Self)
vs. Helpfile ( oPS für Printer gedacht )

Code: Alles auswählen

      oBmpTmp := XbpBitmap():New():Create( oPS ) 
      oPSTmp  := XbpPresSpace():New():Create() 
      oBmpTmp:PresSpace( oPSTmp ) 
      oBmpTmp:Make( oIco:XSize, oIco:YSize ) 
      ...
      oIco:Draw( oPSTmp, {0,0} )  
aber das Ergebnis mit oIcon:getBitmap() ist nicht gut
Icon_GetBitmap_OD.JPG
Icon_GetBitmap_OD.JPG (122.58 KiB) 3494 mal betrachtet
links nach rechts : System-Imagelist, Customdraw-Imagelist,Ownerdraw-Imagelist,Xbase++ Ownerdraw oIcon:getBitmap()
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: oIcon:Draw() bei Ownerdraw

Beitrag von Tom »

Warum malst Du das Icon nicht direkt? Die Rückgabe von :GetBitmap ist nicht skalierbar und entspricht immer der Ladegröße des Icons. Das geht schöner.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: oIcon:Draw() bei Ownerdraw

Beitrag von AUGE_OHR »

Tom hat geschrieben:Warum malst Du das Icon nicht direkt? Die Rückgabe von :GetBitmap ist nicht skalierbar und entspricht immer der Ladegröße des Icons. Das geht schöner.
das war doch gerade meine Frage ob das im Xbase++ Ownerdraw geht ( bei mir eben nicht )

Code: Alles auswählen

oIcon:draw(oPS,{nXDest,nYDest,16,16}
allerdings ist mein oPS nicht der "gewöhnliche" sondern der von einem Bitmap was aber laut Demo Beispiel funktionieren müsste ...

o:GetBitmap : PDR 6336 gefunden
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: oIcon:Draw() bei Ownerdraw

Beitrag von Tom »

Hallo, Jimmy.

Ich mache das ständig - schon seit Jahren:

Code: Alles auswählen

oIcon := XbpIcon():New():Create()
oIcon:Load('myicons.dll',ICONIDENTIFIER,xSize[1],xSize[2]) // um aus einer DLL ein Icon in der Größe x[1]/x[2] zu laden, geht auch mit Ressourcen
oIcon:Draw(oPs,{x1,y1,x2,y2})
In den Ownerdrawing-Methoden recycle ich übrigens das Objekt. Es ist nicht erforderlich, für jedes zu zeichnende Icon (gilt auch für Bitmaps und ähnliche Ressourcen) jedes Mal ein neues Objekt zu erzeugen. Beim Wechsel des Inhalts reicht ein abermaliges Load, und ohne Inhaltswechsel kann man dasselbe Icon durch abermaliges Draw beliebig oft zeichnen. Alles andere kostet viel, viel Zeit.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: oIcon:Draw() bei Ownerdraw

Beitrag von AUGE_OHR »

Tom hat geschrieben:Ich mache das ständig - schon seit Jahren
dachte ich mir doch das es gehen muss.

dann muss das doch an was anderem liegen ... :-k
gruss by OHR
Jimmy
Antworten