Fotos darstellen 1.90.331
Moderator: Moderatoren
Fotos darstellen 1.90.331
Hallo,
ich habe mir ein kleines Lagerprogramm geschrieben und möchte mir Bilder der eingelagerten Teile mit jedem Datensatz anzeigen lassen.
In den Xbase Hilfedateien bin ich auf die SDI Demo gestoßen. Dort werden ja Fotos der Parts abgebildet.
Bin ich überhaupt auf der richtigen Spur um so etwas selbst zu verwirklichen?
In der Datendatei Parts.dbf gibt es ein Feld, was in meinem DBF Viewer als <bitmap/binary> dargestellt wird. Was ist das für ein Feld und wo kann ich mehr darüber erfahren? Hat das was mit der FOXCDX Database engine zu tun?
mfg
Wolfgang
ich habe mir ein kleines Lagerprogramm geschrieben und möchte mir Bilder der eingelagerten Teile mit jedem Datensatz anzeigen lassen.
In den Xbase Hilfedateien bin ich auf die SDI Demo gestoßen. Dort werden ja Fotos der Parts abgebildet.
Bin ich überhaupt auf der richtigen Spur um so etwas selbst zu verwirklichen?
In der Datendatei Parts.dbf gibt es ein Feld, was in meinem DBF Viewer als <bitmap/binary> dargestellt wird. Was ist das für ein Feld und wo kann ich mehr darüber erfahren? Hat das was mit der FOXCDX Database engine zu tun?
mfg
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2832
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 98 Mal
- Danksagung erhalten: 13 Mal
Re: Fotos darstellen 1.90.331
Hallo, Wolfgang -
im Programm sdidemo.prg (etwas Zeile 37) wird die parts.dbf über FOXCDX geöffnet. Wenn Du mehr über die mit dem FoxDbe-Modul verfügbaren Datentypen wissen willst, solltest Du in der Hilfe mal nach FOXDBE suchen. Da findest Du dann auch Hinweise zum Erstellen, sowie zu den Memo-Feldtypen der FoxDbe.
In der dbesys.prg werden beide Compound DBEs, DBFNTX und FOXCDX, zur Laufzeit bereitgestellt.
im Programm sdidemo.prg (etwas Zeile 37) wird die parts.dbf über FOXCDX geöffnet. Wenn Du mehr über die mit dem FoxDbe-Modul verfügbaren Datentypen wissen willst, solltest Du in der Hilfe mal nach FOXDBE suchen. Da findest Du dann auch Hinweise zum Erstellen, sowie zu den Memo-Feldtypen der FoxDbe.
In der dbesys.prg werden beide Compound DBEs, DBFNTX und FOXCDX, zur Laufzeit bereitgestellt.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fotos darstellen 1.90.331
Wolfgang,
klar kann man auch mit der 1.9 Bilder darstellen. Da hat sich eigentlich nichts geändert.
FOXCDX hat neben dem normalen Memofeld Typ M noch ein Memofeld Typ V. Das ist ein binäres Memo. Ich selber speichere da auch teilweise Bilder drin. Man muß sich nur bewußt sein das die dbf dann natürlich sehr schnell sehr groß werden kann.
Jan
klar kann man auch mit der 1.9 Bilder darstellen. Da hat sich eigentlich nichts geändert.
FOXCDX hat neben dem normalen Memofeld Typ M noch ein Memofeld Typ V. Das ist ein binäres Memo. Ich selber speichere da auch teilweise Bilder drin. Man muß sich nur bewußt sein das die dbf dann natürlich sehr schnell sehr groß werden kann.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: Fotos darstellen 1.90.331
Moin,
wäre es da nicht besser in der dbf einen Dateinamen zu speichern und diese Datei in ein Fenster zu laden. Geht so etwas überhaupt?
Wenn die DBF durch die Bilder groß wird, belastet das ja auch die Netzwerkgeschwindigkeit oder?
Wolfgang
wäre es da nicht besser in der dbf einen Dateinamen zu speichern und diese Datei in ein Fenster zu laden. Geht so etwas überhaupt?
Wenn die DBF durch die Bilder groß wird, belastet das ja auch die Netzwerkgeschwindigkeit oder?
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2832
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 98 Mal
- Danksagung erhalten: 13 Mal
Re: Fotos darstellen 1.90.331
Guten Morgen, Wolfgang -
beides ist möglich, sowohl ein Speichern des Bildes in der DBF-/FPT-Datei, als auch ein Verlinken auf eine externe Bilddatei. Was sinnvoller ist, das muss der Programmierer (oder sein Auftraggeber) jeweils selbst entscheiden.
beides ist möglich, sowohl ein Speichern des Bildes in der DBF-/FPT-Datei, als auch ein Verlinken auf eine externe Bilddatei. Was sinnvoller ist, das muss der Programmierer (oder sein Auftraggeber) jeweils selbst entscheiden.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Fotos darstellen 1.90.331
Hallo Wolfgang,
so mache ich das imer. Es wird nur der Dateiname (mit oder ohne verzeichnis) gespeichert. Und dann eben entsprechend gehandelt, wenn das Bild/die DAtei benötigt wird. Entweder kopiert, oder am Bildschirm (z.B. auf einem Static) angezeigt. Oder Du rufst ein externen Programm auf, das weiter mit dem Bild arbeitet.
so mache ich das imer. Es wird nur der Dateiname (mit oder ohne verzeichnis) gespeichert. Und dann eben entsprechend gehandelt, wenn das Bild/die DAtei benötigt wird. Entweder kopiert, oder am Bildschirm (z.B. auf einem Static) angezeigt. Oder Du rufst ein externen Programm auf, das weiter mit dem Bild arbeitet.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fotos darstellen 1.90.331
Moin Wolfgang,
das kommt immer drauf an.
Du hast natürlich Recht: Wenn zu viele zu große Bilder in einer dbf liegen, dann ist das irgendwann nicht mehr gut. Wenn das aber nur sehr viele kleine Bilder sind, dann ist das kein Problem mehr. Ich habe z. B. ein Programm geschrieben, das je Datensatz ein Bild von ca. 3 - 10 KB ablegt. Da müssen dann schon so richtig viele Sätze kommen, bis das problematisch wird.
Der Vorteil der Bilder in der dbf ist halt, das da niemand so einfach ran kommt. Das die nicht mal eben versehentlich gelöscht werden können. Das ich mich um Pfade nicht zu kümmern brauche.
Von daher ist das immer eine fallweise Abwägung, was jeweils besser ist.
Jan
das kommt immer drauf an.
Du hast natürlich Recht: Wenn zu viele zu große Bilder in einer dbf liegen, dann ist das irgendwann nicht mehr gut. Wenn das aber nur sehr viele kleine Bilder sind, dann ist das kein Problem mehr. Ich habe z. B. ein Programm geschrieben, das je Datensatz ein Bild von ca. 3 - 10 KB ablegt. Da müssen dann schon so richtig viele Sätze kommen, bis das problematisch wird.
Der Vorteil der Bilder in der dbf ist halt, das da niemand so einfach ran kommt. Das die nicht mal eben versehentlich gelöscht werden können. Das ich mich um Pfade nicht zu kümmern brauche.
Von daher ist das immer eine fallweise Abwägung, was jeweils besser ist.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Fotos darstellen 1.90.331
Hi,
die binären Memofelder werden nicht in der DBF, sondern immer in der FPT Datei gespeichert.
Bilder in der DBF wären auf Textfelder angewiesen, die von der Größe stark begrenzt sind.
Der Nachteil der Memofelder ist, dass man nachträglich eine defekte Datei nicht mehr sauber zuordnen kann, das ist mir mit einem Text-Memofeld einmal passiert (vermutlich Kopierfehler DBF/DBT).
Ab der 2.0 kann die FPT Datei sehr groß werden, bei der 1.90 dürften es 2 oder 4 GB sein.
Für kleine Produktbilder hält das eine Weile, die Bilder eines Jahres mit meiner Lumix, sprengen das sofort.
die binären Memofelder werden nicht in der DBF, sondern immer in der FPT Datei gespeichert.
Bilder in der DBF wären auf Textfelder angewiesen, die von der Größe stark begrenzt sind.
Der Nachteil der Memofelder ist, dass man nachträglich eine defekte Datei nicht mehr sauber zuordnen kann, das ist mir mit einem Text-Memofeld einmal passiert (vermutlich Kopierfehler DBF/DBT).
Ab der 2.0 kann die FPT Datei sehr groß werden, bei der 1.90 dürften es 2 oder 4 GB sein.
Für kleine Produktbilder hält das eine Weile, die Bilder eines Jahres mit meiner Lumix, sprengen das sofort.
Gruß
Hubert
Hubert
Re: Fotos darstellen 1.90.331
So, ich war tätig. In der Hilfe unter :caption stand ich muss die Datei mit loadfile() laden. Leider gibt es mit meinem Code eine Fehlermeldung "Methode unbekannt".
Wo liegt mein Fehler?
mfg
Wolfgang
Code: Alles auswählen
obild := Xbpstatic():New (,, {round(oCrt:xsize*0.009,0),round(oCrt:ysize*0.195,0)} , {round(oCrt:xsize*0.15,0),round(oCrt:ysize*0.13,0)} )
obild : type :=XBPSTATIC_TYPE_BITMAP
obild : loadfile("efwd-1.bmp")
obild : caption :=XBPSTATIC_TYPE_BITMAP
obild : create()
Wo liegt mein Fehler?
mfg
Wolfgang
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fotos darstellen 1.90.331
Wolfgang,
:loadfile() ist eine Methode von XbpBitmap(). Du mußt das nehmen, nicht XbpStatic().
Jan
:loadfile() ist eine Methode von XbpBitmap(). Du mußt das nehmen, nicht XbpStatic().
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2832
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 98 Mal
- Danksagung erhalten: 13 Mal
Re: Fotos darstellen 1.90.331
Hallo, Wolfgang -
wenn Du ein XbpStatic() vom Type XBPSTATIC_TYPE_BITMAP haben willst, dann wird das Bitmp über setCaption() geladen. Allerdings muss das Bitmap dann in einer DLL oder als Resource im Programm eingebunden sein.
Wenn Du auf externe Dateien zugreifen willst, solltest Du, wie Jan geschrieben hat, ein XbpBitmap() verwenden.
wenn Du ein XbpStatic() vom Type XBPSTATIC_TYPE_BITMAP haben willst, dann wird das Bitmp über setCaption() geladen. Allerdings muss das Bitmap dann in einer DLL oder als Resource im Programm eingebunden sein.
Wenn Du auf externe Dateien zugreifen willst, solltest Du, wie Jan geschrieben hat, ein XbpBitmap() verwenden.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fotos darstellen 1.90.331
du brauchst die ganze CLASS BitmapRef aus SdiPart.prg wenn du damit arbeiten willst.
es geht darum die Grösse des Images zu berücksichtigen und den o:Draw() Slot zu nutzen für das "re-paint".
zum ändern der Grösse kann man die Function BMP2BMP benutzen die du hier im Forum findest.
---
ich habe in der Maske/Liste ein Thumb als Vorschau im Memo.
wenn man auf die Vorschau drauf klickt erscheint das ganze Bild was ich von der "Platte" lade.
gruss by OHR
Jimmy
Jimmy
Re: Fotos darstellen 1.90.331
Moin,
Ich möchte das Bild in einem xbpcrt Fenster anzeigen lassen.
Daher habe ich mich an die Hilfe für xbpbitmap gehalten und den Code so abgeändert, dass eine Datei geladen wird. Es wird schon das Bild angezeigt. Allerdings scheint die Bildgröße wir festgenagelt unten links in der Ecke. {10,10} für die Position wird scheinbar nicht beachtet. Allerdings kann ich mir nicht erklären was :presSpace() macht. Kann man damit die Position und Größe des Bildes am Bildschirm einstellen oder ist das nur ein Speicherplatz?
Bei der CLASS BitmapRef aus SdiPart.prg wird allerdings die Grafik aus einem Feld dargestellt. Wenn ich das richtig gesehen habe, so wird auch ein xbpStatic erzeugt oder?
Wolfgang
Code: Alles auswählen
oPS := SetAppWindow():presSpace()
oBMP:= XbpBitmap():new( , {10,10 , 100, 100}):create( )
oBMP:loadfile("efwd-1.bmp")
oBMP:draw( oPS )
Daher habe ich mich an die Hilfe für xbpbitmap gehalten und den Code so abgeändert, dass eine Datei geladen wird. Es wird schon das Bild angezeigt. Allerdings scheint die Bildgröße wir festgenagelt unten links in der Ecke. {10,10} für die Position wird scheinbar nicht beachtet. Allerdings kann ich mir nicht erklären was :presSpace() macht. Kann man damit die Position und Größe des Bildes am Bildschirm einstellen oder ist das nur ein Speicherplatz?
Bei der CLASS BitmapRef aus SdiPart.prg wird allerdings die Grafik aus einem Feld dargestellt. Wenn ich das richtig gesehen habe, so wird auch ein xbpStatic erzeugt oder?
Wolfgang
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fotos darstellen 1.90.331
Hallo Wolfgang,
nun, Du hast die Parameter nicht ganz korrekt angegeben. Vorne kommen Owner und Parent, und dann zwei Arrays mit Position und Größe. Dir fehlt vorne ein Parameter, und Du hast Postion und Größe in eines gepackt.
Jan
nun, Du hast die Parameter nicht ganz korrekt angegeben. Vorne kommen Owner und Parent, und dann zwei Arrays mit Position und Größe. Dir fehlt vorne ein Parameter, und Du hast Postion und Größe in eines gepackt.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: Fotos darstellen 1.90.331
Code: Alles auswählen
oPS := SetAppWindow():presSpace()
obild := Xbpstatic():New (,, { 10,10} , { 150, 150} ):create()
oXbp:= XbpBitmap():new( obild ,,,)
oXbp:loadfile("efwd-1.bmp")
oXbp:draw(oPS)
oXbp:create()
Wolfgang
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fotos darstellen 1.90.331
Wolfgang,
falsche Reihenfolge.
- Erst das Static erstellen
- Dann den oPs z. B. per oPs := XbpPresSpace():new():create(oStatic:winDevice())
- und dann das Bild einbauen per oBitmap := XbpBitmap():new():create(oPs)
Jan
falsche Reihenfolge.
- Erst das Static erstellen
- Dann den oPs z. B. per oPs := XbpPresSpace():new():create(oStatic:winDevice())
- und dann das Bild einbauen per oBitmap := XbpBitmap():new():create(oPs)
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: Fotos darstellen 1.90.331
Code: Alles auswählen
obild := Xbpstatic():New (,, {20,20} , {240,240 }):create()
oPs := XbpPresSpace():new():create(obild:winDevice())
oXbp:= XbpBitmap():new()
oXbp:loadfile("first.bmp")
oXbp:draw(oPS)
Das funktioniert jetzt soweit. Wenn das Bild mehr Pixel hat wie das static Fenster macht der Code das Bild passend in das Statik.
Hat der Bild wesentlich weniger Pixel, so erscheint das Bild unten links in der Ecke. Geht das überhaupt, dass man mit wenigen Pixel das Static Fenster komplett ausfüllt? Dazu muss ja das Bild dann rechnerisch vergrößert werden oder sehe ich das falsch?
Ich habe create() für XbpBitmap() vergessen. Trotzdem funktioniert der Code. Lösche ich create() für Xbpstatic() gibt es eine Fehlermeldung. Ist das normal?
Wolfgang
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fotos darstellen 1.90.331
Wolfgang,
versuch mal:
- beim oBitmap:create() den oPs als Parameter einbauen (wie in meinem Beispiel angegeben)
- im oBitmap:draw als zweiten Parameter ein Array aus 4 Werten einbauen: {links, unten, breite, höhe}. Also die vier Werte in ein Array, nicht wie beim XbpStatic in zwei.
- manchmal habe ich Darstellungsprobleme. Daher habe ich im :draw noch einen weiteren Parameter drin: :draw(oPs, {position+abmessung}, , , GRA_BLT_BBO_IGNORE). Dazu mußt Du dann aber die gra.ch mit einbinden.
Bei mir skaliert der die Bitmaps in beide Richtungen. Also zu große passend klein machen, zu kleine passend groß machen. Sollte daran liegen.
Jan
versuch mal:
- beim oBitmap:create() den oPs als Parameter einbauen (wie in meinem Beispiel angegeben)
- im oBitmap:draw als zweiten Parameter ein Array aus 4 Werten einbauen: {links, unten, breite, höhe}. Also die vier Werte in ein Array, nicht wie beim XbpStatic in zwei.
- manchmal habe ich Darstellungsprobleme. Daher habe ich im :draw noch einen weiteren Parameter drin: :draw(oPs, {position+abmessung}, , , GRA_BLT_BBO_IGNORE). Dazu mußt Du dann aber die gra.ch mit einbinden.
Bei mir skaliert der die Bitmaps in beide Richtungen. Also zu große passend klein machen, zu kleine passend groß machen. Sollte daran liegen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: Fotos darstellen 1.90.331
Code: Alles auswählen
obild := Xbpstatic():New (,, {20,20} , {240,240 }):create()
oPs := XbpPresSpace():new():create(obild:winDevice())
oXbp:= XbpBitmap():new():create(oPS)
oXbp:loadfile(verzeich+"/bilder/efwd-1.bmp")
oXbp:draw(oPS , { 0 , 0, 240 , 240} ,,, GRA_BLT_BBO_IGNORE)
obild:hide() versteckt das komplette Objekt (xbpstatic und xbpbitmap).
obild:show() holt aber nur ein leeres static Fenster wieder auf den Bildschirm. Das Bild wird aber nicht mehr angezeigt. Das Verhalten kenne ich so nicht.
Durch
Code: Alles auswählen
oXbp:loadfile("efwd-1.bmp")
obild:draw(oPS , { 0 , 0 , 240, 240 } ,,, GRA_BLT_BBO_IGNORE)
1. ist das normal so?
2. Wenn man ständig mit loadfile() Dateien lädt, wird irgendwann mal der Speicher voll oder wird der vorherige Speicher überschrieben?
Wolfgang
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fotos darstellen 1.90.331
hi,
man sollte NICHT oXbp als Variabel benutzten da die in der Event-Scheife verändert wird
es könnte also später ein völlig anderes Object oder NIL enthalten sein und ein weiteres oXbp:LoadFile() schlägt fehl
zu deinem Code
das funktioniert "1 Mal" um ein Bitmap in den Presspace zu "malen". Wenn es "überdeckt" ist wird es "so" nicht "automatisch neu gemalt"
habe paar Kommentare in den Source eingefügt
o:Paint() ist ein Callback Slot von XbpWindow() worauf als SuperClass viel XbParts basieren.
ein Bitmap hat keinen Parent sondern die Verknüpfung zu einem XbPart über den Presspace.
Das OS sendet eine Messages wenn "Xbase-Part wurde neu gezeichnet".
die Message (Nachricht) wird nun vom Parent "abgefangen" (o:Paint) und im Codeblock steht nun die Anweisung was passieren soll.
die Anweisung geht an die Child die dann in Aktion treten
Das ganze nennt sich "Owner Draw" weil die App bestimmt wie/was angezeigt wird und nicht das OS
deshalb war mein Tip gleich die ganze CLASS BitmapRef zu verwenden und damit zu experimentieren.
man sollte NICHT oXbp als Variabel benutzten da die in der Event-Scheife verändert wird
Code: Alles auswählen
nEvent := APPEVENT( @mp1, @mp2, @oXbp )
zu deinem Code
Code: Alles auswählen
oImage:loadfile("efwd-1.bmp")
obild:draw(oPS, ... )
habe paar Kommentare in den Source eingefügt
Code: Alles auswählen
METHOD BitmapRef:create( oParent, oOwner, aPos, aSize, aPresParem, lVisible )
LOCAL aAttr[ GRA_AA_COUNT ]
::xbpStatic:create( oParent, oOwner, aPos, aSize, aPresParem, lVisible )
// Presspace mit Device verknüpfen
::oPS:create( ::xbpStatic:winDevice() )
// Bitmap mit Presspace als oPScompat
::oBmp:create( ::oPS )
// Farbe Hintergrund
aAttr[ GRA_AA_COLOR ] := GRA_CLR_PALEGRAY
::oPS:setAttrArea( aAttr )
// DAS ist der Callback Slot zum "malen"
::xbpStatic:paint := {|aClip| ::draw(aClip) }
ein Bitmap hat keinen Parent sondern die Verknüpfung zu einem XbPart über den Presspace.
Das OS sendet eine Messages wenn "Xbase-Part wurde neu gezeichnet".
die Message (Nachricht) wird nun vom Parent "abgefangen" (o:Paint) und im Codeblock steht nun die Anweisung was passieren soll.
die Anweisung geht an die Child die dann in Aktion treten
Code: Alles auswählen
METHOD BitmapRef:draw( aClip )
// Bitmap neu "malen"
lRet := ::oBmp:draw( ::oPS, aTarget, aSource, , GRA_BLT_BBO_IGNORE )
deshalb war mein Tip gleich die ganze CLASS BitmapRef zu verwenden und damit zu experimentieren.
gruss by OHR
Jimmy
Jimmy