Bitmap & Memo

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

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

Bitmap & Memo

Beitrag von AUGE_OHR »

hi,

ich bekomme es nicht hin ein "interes" Bitmap mit L & L anzuzeigen.

so langsam hab einen Verdacht :

1.) wenn ich es so abspeicher, was ist dann "intern" im Memo ?

Code: Alles auswählen

LOCAL oTargetPS := XbpPresSpace() :new() :create()
LOCAL oBitmap   := XbpBitmap() :new() :create()
LOCAL oPS

   oPS := oSourceArea:lockPS()
   oBitmap:presSpace( oTargetPS )
   oBitmap:make( nSizeX, nSizeY )
   GraBitBlt( oTargetPS, oPS, { 0, 0, nSizeX, nSizeY }, aRect )
   oSourceArea:unLockPS( oPS )
   Sleep( 0 )
   oTargetPS:destroy()

   IF RECORDLOCK( LOCK_DAUER )
      // intern Bitmap in Memo saven
      REPLACE CHINABMP->BITMAP WITH oBitmap:SetBuffer()
      UNLOCK
   ENDIF

   cSavePic := zPATH + "PIC\" + cBildnr + ".BMP"

   IF FILE( cSavePic )
      FERASE( cSavePic )
   ENDIF
   // externes Bitmap saven
   oBitmap:SaveFile( cSavePic )
hab ich nun im Memo wirklich ein Bitmap ?

2.) wie sieht euer DBESYS.PRG für ein Memo aus worin ihr Bitmaps habt ?

Es ist ja möglich das mein Problem mit L & L damit zusammen hängt
das ich ein Memo Type habe was nicht dem "Bitmap Type" von L & L
entspricht und deshalb es "leer" bleibt ?

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

14 Bytes fehlen ...

Beitrag von AUGE_OHR »

moin,

Code: Alles auswählen

FUNCTION TEST()
LOCAL Retvar := ""
LOCAL oPS  := XbpPresSpace():new():Create()
LOCAL oBmp := XbpBitmap():new():create(oPS)
      oBmp:loadfile("D:\ALASKA\RES\BEXIT1.BMP")

      Retvar := oBmp:setBuffer()
      MSGBOX("Länge "+STR(LEN(Retvar)))

RETURN Retvar
wenn man dann die Länge mit dem original vergleicht "fehlen" 14 Byte
am Anfang, also der Header.

Die Frage ist also ob Xbase++ den Header der Bitmaps überhaupt im
Memo speichert denn ...

In meinem BMP kommt 15th Stelle ein "("
Wenn ich nun in L & L das Memofeld direkt einbinde "sehe" ich in der
Statusbar von L & L genau das "(" wenn ich die "Zeichnung" in einen
String umwandle.

... ergo würde ich mal behaupten Xbase++ speichert keinen Header
im Memofeld ?!?

sollte das so sein so könnte man ja Xbase++ Memodateien mit Bitmaps
grundsätzlich nicht an 3th-party Applicationen "direkt" übergeben :(((

gruss by OHR
Jimmy
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Beitrag von J.Renseler »

Hi, hast du das ganze mal mit FRead probiert?

also in etwa so:

Code: Alles auswählen

nHndl := FOpen( "Beispiel.jpg")
cString := FReadStr( nHndl, sizeof( "Beispiel.jpg"))


DB->BILD := cString

Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Ich speichere Bilddaten aus solchen Gründen als Hexadezimalwerte

Code: Alles auswählen

cFile := FileStr("bild.bmp")
cFile := Str2Hex(cFile)
db->Memo := cFile
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

du hast nicht angegeben welche DBE du nutzt.
Binärdateien (z.B. Bilder) kann man nur mit der FOXDBE und Datentyp V speichern. Damit sollte es allerdings keine Probleme geben.

Ich persönlich habe damit aber keine Erfahrung, ich habe wenn überhaupt immer nur den Pfad in DBF gespeichert und das Bild im Dateisystem belassen.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Hubert,

das mag bei Dir intern in der Behörde 8) gut funktionieren. Aber was ist, wenn da irgendwelche Leute in dem Verzeichnis mit den Bildern rumpfuschen, und plötzlich sind Bilder weggelöscht? Oder Du möchtest die Bilder in einem Kaufprogramm vor Ideen-Klau schützen. Zugegeben, auch aus einer Datenbank kann man die rausklauen. Aber die Hürde für Amateure ist doch wesentlich höher.

Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Jan hat geschrieben:das mag bei Dir intern in der Behörde 8) gut funktionieren.
Fürs Büro brauche ich gar keine Bilder ;-)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Hubert,

kommt immer drauf an, was man damit macht. Wir reden hier ja nicht von mehr oder weniger leicht bekleideten Mädels zur Ablenkung von der täglichen Arbeit. :roll:

Im Moment arbeite ich gerade an einer Anwendung, die eine Art Katalog beinhaltet. Da sollen zur Verdeutlichung die einzelnen Artikel auch als Bild angezeigt und gedruckt werden können. Da aber der Auftraggeber nicht möchte, daß die Mitbewerber seine teuer erstellten Photos für sich vereinnahmen, sollen die zumindest ein wenig "weggeschlossen" werden. Wobei noch sicherer als in der Datenbank und mit dem Tipp von Tom verHEXt, wäre vermutlich verschlüsselt. Das kann dann sicher niemand mal eben so da rausziehen.

Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Jan hat geschrieben:Wir reden hier ja nicht von mehr oder weniger leicht bekleideten Mädels zur Ablenkung von der täglichen Arbeit. :roll:
und wie kommst du drauf, dass ich das ausdrücken wollte :oops:

Ich hatte mal vor meine private Fotosammlung mit Schlagtexten in einem Programm abzulegen, aber das war mir dann doch zuviel Arbeit. Selbst die PDF Version meiner 'Wissensdatenbank' für PC Themen ruht, beides jeweils mit Verweisen in einer MySQL Datenbank. Einfach zuviel Arbeit, die man eigentlich nicht braucht ;-)

Versuche es doch mit der FOXDBE und V als Datentyp. Wenn du die Tools hast, kannst du ja noch crypt() verwenden um die Dateien zu sichern.

Beim Speichern kannst du ja mit FOPEN() und FREAD() die ganze Datei auf einmal in einen String laden, diesen manipulieren und dann in dem binären Memofeld speichern. Wenn es mit XbpBitmap() damit Probleme gibt, kannst du ja immer noch eine temporäre Datei erstellen und mit LoadFile() laden und löschen.

Übrigens, in der Methode XbpBitmap():setBuffer() steht unten, dass der Header fehlt, also die ersten 14 Byte. Diese Funktion scheint also nicht geeignet um die Bilder zu speichern. Bei JPG etc. sind die Unterschiede wohl größer.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Hubert,

irgenwie schaffen wir es immer wieder, aneinanderzu geraten oder aneinander vorbeizureden, oder?

So war das in keinster Weise gemeint. Als Du meintest, Du würdest das im Pfad ablegen hatte ich angenommen, Du redest von Deiner Arbeit. Und habe vorausgesetzt, daß in einem "geschlossenen System" bei Euch eventuell andere Maßnahmen ergriffen werden als in frei zugänglichen (wie Kaufsoftware). Sowohl in der einen als auch in der anderen Richtung. Ein Briefmarken-Verwaltungsprogramm z. B. wird sicher keine Rechteverwaltung haben wie Eure interne Sotware. Andererseits müssen Zeichnungen/Bilder/etc. vermutlich nicht gesondert gesichert werden, weil da keine Mitbewerber oder Spaßvögel dran rumpfuschen.

Das mit den leichtbekleideten Mädels zur Ablenkung von der täglichen Arbeit war ironisch gemeint!!! So etwa in Richtung Boss-Taste.

Ja, ich nutze FOXDBE. Bin extra darauf umgestiegen. CDX hab ich ja schon länger drin wegen der Tags. FOXCDX habe ich kürzlich erst eigentlich wegen der sequenziellen Felder genommen. Und V baue ich jetzt gerade wegen der Bilder ein. Die Idee mit crypt() ist übrigens gut. Ich hatte bei meinem Kommentar eigentlich an die Verschlüsselung aus der Profession Subscription gedacht, die ich aber im Gegensatz zu den Tools nicht habe.

Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Jan hat geschrieben:Hallo Hubert,
irgenwie schaffen wir es immer wieder, aneinanderzu geraten oder aneinander vorbeizureden, oder?
So war das in keinster Weise gemeint.
ich habe vielleicht den falschen Smily gesetzt und fühle mich nicht angegrifffen ;-)

Die AES Verschlüsselung aus der Prof. Sub. ist riskant, wenn da mit den Zertifikaten was schief läuft ist die DBF Schrott. Crypt() kann man im Programm einmal einrichten und es läuft.

Ich hatte aber tatsächlich vergessen, dass Jimmy diesen Thread eröffnet hat und die fehlenden 14 Byte sind laut Handbuch wie oben beschrieben bei seinem Aufruf normal.

Wie lädst du die Bitmaps bzw. JPGs aus der Datei zurück in einen XbpBitmap() ?

:load() zielt ja auf eine gelinkte Resource ...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,

danke erstmal für eure Antworten
Hubert hat geschrieben: du hast nicht angegeben welche DBE du nutzt.
ja sorry. Ich ging davon aus das man vorher die L&L Threads auch
gelesen hätte wo ich das Problem mit Bitmap & Memo angefangen habe.

Die Memo Datei ist eine FTP mit FOXDBE vom Type "V" wobei ich in der
DBESYS von "leer" bis "alles" an settings ausprobiert habe.
Tom hat geschrieben: Ich speichere Bilddaten aus solchen Gründen als Hexadezimalwerte

Code: Alles auswählen

cFile := FileStr("bild.bmp") 
cFile := Str2Hex(cFile) 
db->Memo := cFile
Frage : kapiert das L & L ?
J.Renseler hat geschrieben:

Code: Alles auswählen

nHndl := FOpen( "Beispiel.jpg") 
cString := FReadStr( nHndl, sizeof( "Beispiel.jpg")) 
DB->BILD := cString 
das ergibt, so denke ich, "nur" einen String (Stream ?) und kein "Bild" ?
Hubert hat geschrieben: Übrigens, in der Methode XbpBitmap():setBuffer() steht unten, dass der Header fehlt, also die ersten 14 Byte. Diese Funktion scheint also nicht geeignet um die Bilder zu speichern. Bei JPG etc. sind die Unterschiede wohl größer.
Ja das hab ich gesehen und bin deshalb erst auf die Idee gekommen das
mal genauer zu überprüfen ob/wie das auf L&L "wirkt"
In der Function TEST hab ich in :Setbuffer auf die anderen Konstanten wie

Code: Alles auswählen

 Retvar := oBmp:setBuffer( ,XBPBMP_FORMAT_JPG)
ausprobiert. Bei den "anderen" Type werden die erst 14 Byte zurück
gegeben nur bei Bitmap nicht. Allerdings hat das bei L&L nicht geholfen
da er mit dem "String/Stream" nur die ersten des String/Stream anzeigt
und nicht das "Bild"

nochmal zurück zu Tom´s Methode. Mir ist nicht klar wie ich da dann ein
"Bild" laden kann den üblicherweise muss man doch mit einem :Setbuffer
auf ein XbpBitmap arbeiten, oder ?

gruss by OHR
Jimmy
Nachtrag : Im Alaska Forum 3-PP hab ich noch eine Antwort von Andreas
Gehrs-Pahl erhalten. Kurz gesagt es geht nicht mit Xbase++ Memo und
L&L ... einer oder beide müssten ihre Schnittstellen "anpassen" ... :(
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

das Einlesen einer Datei in einen String und das Speichern in eine Memovariable vom Typ V ist nicht das Problem. So wie ich das sehe ist das Problem, dass L&L keine Ahnung hat, dass der Inhalt des Memofeldes etwas anderes als Text ist.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

... aber wäre denn dann der Weg, den Hubert oben erwähnt hat, nicht eine Lösung: V-Feld auslesen, Inhalt temporär speichern, und diese Datei dann in L+L einbauen?

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

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: das Einlesen einer Datei in einen String und das Speichern in eine Memovariable vom Typ V ist nicht das Problem. So wie ich das sehe ist das Problem, dass L&L keine Ahnung hat, dass der Inhalt des Memofeldes etwas anderes als Text ist.
JA so scheint es zu sein ...
eine Antwort von Combit (?)
This is not possible directly. You need to create a bitmap from that
BLOB (either save as temp file or create a bitmap in memory) and pass
the resulting filename (as path) or handle (LlDefineFieldExtHandle())
to LL.

How the BLOB represents the whole bitmap data is unknown (it's a BLOB
;-)), and how you need to create a bitmap from it, this is something
you must know anyhow.

Paulchen

> so it might be that my DBESYS setting for Memo Field
> is not what L & L "recognize" as Bitmap ?
sieht so aus das L & L nicht so "schlau" ist wie ich dachte.
Jan hat geschrieben: ... aber wäre denn dann der Weg, den Hubert oben erwähnt hat, nicht eine Lösung: V-Feld auslesen, Inhalt temporär speichern, und diese Datei dann in L+L einbauen?
Da ich die Bitmaps auch "extern" habe "kann" ich zwar die nutzen aber ich
"will" die nun mal aus dem Memo verwenden ... geht nicht gibt es nicht !

nun muss ich also "nur" rausbekommen wie man ein "Handle" von einem
Bitmap bekommt ?

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
AUGE_OHR hat geschrieben:geht nicht gibt es nicht !
wie heißt es so schön...
Wo ein Wille ist, ist auch ein "Geht nicht!" :D

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Jimmy,

ich kann ja Deinen sportlichen Ehrgeiz sehr gut nachvollziehen. Geht mir ja ab und an auch so.

Aber Du kannst doch die Bitmaps im Memo speichern, und nur für den Moment der Übergabe an L+L als Datei ablegen, hinterher sofort wieder löschen. Nicht der vollkommene Weg, aber ohne riesige Bilderliste, alles in V-Feldern, und trotzdem L+L.

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

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: ... und die fehlenden 14 Byte sind laut Handbuch wie oben beschrieben
bei seinem Aufruf normal.
wobei sich immer noch die Frage stellt WIESO ?
... und wie bekomme ich die 14 Beyte "wieder" ?

wenn ich nun :Setbuffer(, XBPBMP_FORMAT_JPG) einsetzte bekomme
ich ja die ersten 14 Byte. bei GIF steht dann z.b. "GIF87A" oder so im
Header.
Jan hat geschrieben: ich kann ja Deinen sportlichen Ehrgeiz sehr gut nachvollziehen
deshalb hab ich an Pablo Botella eine Email geschrieben ob er sowas in
seiner OT4XB Lib hat und/oder er weiss wie man das "handle" von einem
Bitmap (oder Bitmap Object ?) per API bekommt. Mal sehen ob ihm was
dazu einfällt.

Ich werde mal weiter "google(n)" den ich glaube ich hab da mal was von
eine Bitmap "Stream" gelesen, konnte es damals aber nicht zuordnen.

irgendwie muss es auch "intern" mit Xbase++ gehen ...

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
was ist denn mit :GetHWND()? Reicht das nicht?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: was ist denn mit :GetHWND()? Reicht das nicht?
Nope den da ist ein "W" in der Methode :GetH"W"ND()

Nach einigem "google(n)" bin ich jetzt wohl ein wenig schlau als vorher.

Wenn man nach einer Definition für XBP Functionen von Xbase++
fragen würde wäre meine Antwort : Wrapper für API Funktionen mit
Cl*pper OOP Syntax.

Während anscheinend bei anderen Sprachen wie VB oder Delphi ( ich
kann beide Sprachen nicht ) bei einem "create" ein "Handle" zurück
gegeben wird welche man dann benutzt um das Object zu erstellen,
wird uns diese Arbeit von Xbase++ abgenommen und wir bekommen
nur Objecte zurück.

Dies erleichtert zwar dem OOP Programmierer die Arbeit, schränkt ihn
aber gleichzeitig auch ein. Was man also bräuchte wäre ein :getHND()
ohne das "W" für Objecte die kein "Fenster" haben z.b. XbpBitmap()

Die Lösung des L & L Problem läge wohl darin nicht die Xbase++ XBP
Funktionen zu benutzen sondern die API Aufrufe

Code: Alles auswählen

CreateBitmap Lib "gdi32" 
   (ByVal nWidth As Long,
    ByVal nHeight As Long, 
    ByVal nPlanes As Long, 
    ByVal nBitCount As Long, lpBits As Any) As Long 

http://www.vbapihelpline.de/ref/funca.php4?Func=CreateBitmap&Letter=c

oder

LoadImage Lib "user32" Alias "LoadImageA"
   _(ByVal hInst As Long, 
   ByVal lpsz As String, 
   ByVal dwImageType As Long, 
   _ByVal dwDesiredWidth As Long, 
   ByVal dwDesiredHeight As Long, 
   ByVal dwFlags As Long) _As Long

http://www.vbarchiv.net/vbapi/LoadImage.php
wobei ich CreateBitmap bevorzuge den da "scheine" ich die Parameter
zu kennen die gefordert werden. Beide DLL Function sollen ein Bitmap
"Handle" zurück geben.

... aber ich frage mich, wenn ich das "Handle" habe was ich dann mit dem
vom DLL Aufruf CreateBitmap erzeugtem "Ding" (was ist das nun ?) dann
mache ... wie "löschen" ?

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

eine gute und eine schlechte Nachricht ...

Beitrag von AUGE_OHR »

hi,

zuerst die gute Nachricht : Es geht grundsätzlich so

Code: Alles auswählen

    CASE aType[i] $ "V" // BLOB
    IF lAsFields
        LlDefineFieldExtHandle(hJob               ,;
                              aField[i]           ,;
                              FELD2OBJ(MyContens) ,;
                              LL_DRAWING_HBITMAP  ,0)
    ELSE
       LlDefineVariableExt(hJob,aField[i],MyContens,LL_DRAWING,0)
    ENDIF

FUNCTION FELD2OBJ(MyContens)
LOCAL a1
LOCAL a2
LOCAL a3
LOCAL a4
LOCAL a5

LOCAL Retvar := ""
LOCAL oPS  := XbpPresSpace():new():Create()
LOCAL oBmp := XbpBitmap():new():create(oPS)

      oBmp:setBuffer(MyContens,XBPBMP_FORMAT_WIN3X)

*      CreateBitmap Lib "gdi32"
*      (ByVal nWidth As Long,
*       ByVal nHeight As Long,
*       ByVal nPlanes As Long,
*       ByVal nBitCount As Long,
*       lpBits As Any) As Long

      a1 := oBmp:xSize
      a2 := oBmp:ySize
      a3 := oBmp:planes
      a4 := oBmp:bits
      a5 := oBmp:setBuffer( ,XBPBMP_FORMAT_WIN3X)

      Retvar := CreateBitmap(a1,a2,a3,a4,a5)
/*
      wie "lösche" ich das was ich mit CreateBitmap() erzeugt habe ?
*/
      oBmp:destroy()

RETURN Retvar
so nun die schlechte : Das bitmap wird am linken Rand abgeschnitten und
der abgeschnittene Teil taucht rechts dann auf. Ausserdem hat alles einen
"grünen Schatten"

ich tippe hierbei auf einen Xbase++ BUG mit Bitmaps den ich schon mal
Alaska gemeldet habe. Es "fehlen" bei Xbase++ Bitmaps on Top /Right
paar Pixel in der Zeile/Spalte !

Attachment mit Bilder hab ich ins Alaska Forum unter 3PP upgeloadet
und zu Alaska geschickt.

Also "geht es nicht" solange Alaska das Problem nicht "einsieht" und es
behebt :(

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
ich verstehe Deinen Einwand nicht - natürlich steht bei GetHWND() ein W!
Ein Bitmap bekommt einen PresSpace zugewiesen, in dem es gezeichnet wird, ein PresSpace gehört zu einem Window und davon kannst Du doch den Handle nehmen - oder etwa nicht?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo,

ich weiß jetzt nicht genau, ob es hierzu passt. Ich habe in unserem Programm unser Logo als bitmap das ich so einbinde:

Code: Alles auswählen

	oBmp:= XbpBitmap():new() 
	oBmp:load(nil,2001) 
	oBmp:create(oDlg)

   oXbp := XbpPushButton():new( drawingArea, , {500,200}, {230,190}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := (oBmp)
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| Gather( aEditControls ),  .f.  }
die "2001" steht in der sprinter.arc. und die sprinter.arc ist in der projekt.xpj enthalten und wird somit kompiliert.

Dadurch kann auch das Bild nicht verändert werden.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: ich verstehe Deinen Einwand nicht - natürlich steht bei GetHWND() ein W!
Ein Bitmap bekommt einen PresSpace zugewiesen, in dem es gezeichnet wird, ein PresSpace gehört zu einem Window und davon kannst Du doch den Handle nehmen - oder etwa nicht?
a.) ein Bitmap muss nicht einem Presspace zugewiesen werden
b.) ein Presspace ist kein "Fenster" sondern "nur" ein Presspace
c.) ein :GETHND() hätte ich auch gerne für alle anderen XbParts die
kein "Fenster" haben z.b. XbpClipboard()

für eine Win API braucht man ja fast immer das "handle" (und nicht das
Object) deshalb auch der Aufwand mit "CreateBitmap". Es scheint ja
auch soweit zu funktionieren bis auf den Alaska Bitmap BUG.

gruss by OHR
Jimmy
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

hallo Jimmy,

ich verwende die Base64-Codierung aus AsiNet, um Binäre Daten im Memo zu speichern. Funktioniert gut!
Gruß,

Andreas
VIP der XUG Osnabrück
Antworten