XbpTreeView mit Bild

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13691
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

XbpTreeView mit Bild

Beitrag von Jan » Mo, 23. Mär 2020 8:23

Moin,

seit längerem zeige ich in einem XbpTreeView Icons an, die in der arc aufgeführt sind. Geht ja recht simpel über :image, :markedImage, und :expandedImage (die ich in diesem Fall alle mit dem gleichen Wert fülle).

Jetzt wollte ich das etwas aufmotzen und Bilder anzeigen. Die nicht in der arc aufgelistet sind. Dabei stoße ich auf diverse praktische und Verständnisprobleme:
  • In der Onlinehilfe heißt es, ich darf ein XbpBitmap einbauen
  • Aber das darf nur ein bmp sein
  • Und das darf ich nur per :load, :loadfromfile, oder :make dem XbpBitmap zuweisen
Ein paar offene Fragen dazu:
  • Warum kein :setBuffer?
  • Warum kein jpg? Füge ich das ein wird gar nichts angezeigt.
  • Muß ich das XbpBitmap auf einen PresentationSpace legen? Es scheint vollkommen egal zu sein ob oder ob nicht. Aber ich weiß nicht was das jeweils für Nebeneffekte hat.
  • Warum klappt auch ein bmp nicht wirklich? Füge ich das per :loadFile() ein wird einfach ein schwarzes Quadrat angezeigt, nicht das Bild. Aber im Gegensatz zum jpg wird da wenigstens was gezeigt.
Hat da jemand schon Erfahrungen mit gesammelt? Oder kann mir sonst ein paar gute Ideen mitgeben?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1670
Registriert: Mi, 28. Jul 2010 17:16

Re: XbpTreeView mit Bild

Beitrag von ramses » Mo, 23. Mär 2020 18:17

Jan hat geschrieben:
Mo, 23. Mär 2020 8:23
Hat da jemand schon Erfahrungen mit gesammelt? Oder kann mir sonst ein paar gute Ideen mitgeben?
Ich hatte die gleichen Erfahrungen gesammelt. Die JPG können ja noch recht einach in BMP's gewandelt werden. Ich habe diesen Darstellungswunsch dann endgültig aufgegeben. Im überarbeiteten Programm verwende ich Fancytree das lässt keine, gar keine Wünsche offen .....
Valar Morghulis

Gruss Carlo

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13691
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: XbpTreeView mit Bild

Beitrag von Jan » Di, 31. Mär 2020 21:08

So, hab die Lösung.

1) Sowohl jpg als auch :setBuffer() gehen. Da hatte wohl meine Workbench gesponnen. ALs ich das mit exakt dem gleichen Code am Tag darauf noch mal versucht hatte, lief das plötzlich. :setBuffer() geht sowieso, ist aber nicht dokumentiert.

2) Dumme Sache das: Die Grafiken werden, anders als bei anderen Anzeigen eines XbpBitmap, nicht passend skaliert auf de Größe des Parent. Das muß man hier selber machen. Hat Till mir erklärt. Mir war aufgefallen, das immer nur die linke obere Ecke der Bitmaps angezeigt wurde, die in die Größe der TreeView-Grafiken rein passt.

Was ich jetzt noch brauchen könnte wäre ein Aufheller. Wenn ich die Grafiken auf die kleine Größe für ein TreeView-Item runter skaliere, dann sind die irre dunkel. Das dürfte zur Erkennbarkeit gerne ein paaar Stufen heller sein. Gibt es dafür einen Weg?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1670
Registriert: Mi, 28. Jul 2010 17:16

Re: XbpTreeView mit Bild

Beitrag von ramses » Di, 31. Mär 2020 22:19

Hallo Jan

dazu gibt es Bildbearbeitungs DLL's eine die ich verwende ist die freie open-source freeimage.dll
damit kannst du Bilder in vielen Varianten bearbeiten.
Zum Beispiel Helligkeit und Kontrast ändern geht mit folgenden xbase-Funktionen welche die freeimage.dll nutzen.

Beispiele Aufruf Freeimmage.dll zum andern Helligkeit/Kontrast --> Prozent muss zwischen -100 und 100 für Plus/Minus liegen

Code: Alles auswählen

function  FreeImage_Brightness( cFname, cFnameOut, nPercent )  // -100 - 100 
local nDll, ret_val := .f. 
local nQual := JPEG_QUALITYSUPERB // JPEG_DEFAULT

    nDll := FreeImg_GenericLoader( cFname )
    if nDll > 0
       if  FreeImage_AdjustBrightness(nDll, nPercent)
           ret_val := freeImage_Save(FREE_IMAGE_FORMAT.FIF_JPEG, nDll,  cFnameOut,  nQual )
       endif     
       freeImage_Unload( nDll )
    endif

return(ret_val) 


function  FreeImage_Contrast( cFname, cFnameOut, nPercent )  // -100 - 100 
local nDll, ret_val := .f. 
local nQual := JPEG_QUALITYSUPERB // JPEG_DEFAULT

    nDll := FreeImg_GenericLoader( cFname )
    if nDll > 0
       if  FreeImage_AdjustContrast(nDll, nPercent)
           ret_val := freeImage_Save(FREE_IMAGE_FORMAT.FIF_JPEG, nDll,  cFnameOut,  nQual )
       endif     
       freeImage_Unload( nDll )
    endif

return(ret_val) 
Valar Morghulis

Gruss Carlo

Antworten