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

Beitrag von AUGE_OHR »

hi,
andreas hat geschrieben: ich verwende die Base64-Codierung aus AsiNet, um Binäre Daten im Memo zu speichern. Funktioniert gut!
Ich "glaube" nun das es nicht mit dem Abspeichern zu tun hat da ich
verschiedene Methoden ausprobiert habe. Auch die DBESYS scheint
es nicht zu sein, den wenn ich ein Comix oder Sixdrive daraus mache
dann erkennt L & L das Memo nicht als "Zeichnung" sondern als "Text"

Ich "glaube" das der BUG in XbpBitmap() liegt weil bei den Bitmaps
oben/rechts immer ein paar Pixel fehlen(!!!) was man bei einem
oBMP:Make() dann sehr schön sehen kann (wenn man auf Pixel Ebene
sich das ansieht) insbesondere wenn man die Farbtiefe ändert ( 24->8 )

"Beweis" : wenn ich ein "externes" Bitmap mit oBMP:loadfile "lade" und
dann an L & L übergebe bekomme ich das geschilderte L & L Problem.
Das selbe "externe" Bitmap direkt in L & L "geladen" funktioniert !

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:hi,
a.) ein Bitmap muss nicht einem Presspace zugewiesen werden
das wäre mir neu! Sobald Du ein :create() des Bitmaps machst, muss ein PresSpace zugewiesen werden!
AUGE_OHR hat geschrieben:b.) ein Presspace ist kein "Fenster" sondern "nur" ein Presspace
Natürlich ist ein PresSpace kein Fenster - aber ein PresSpace gehört zu einem Fenster (genauer: zu einem Objekt vom Typ XbpWindow() )!
Also: Für jedes zu übergebene Bitmap ein Objekt vom Typ XbpWindow() (was auch immer Du nimmst...) erzeugen und in dem dazugehörigen PresSpace die Bitmap laden.
Sollte eigentlich gehen!

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:
AUGE_OHR hat geschrieben: a.) ein Bitmap muss nicht einem Presspace zugewiesen werden
das wäre mir neu! Sobald Du ein :create() des Bitmaps machst, muss ein PresSpace zugewiesen werden!
Einen Presspace braucht man nur wenn man was anzeigen/zeichnen
will aber nicht wenn du nur das Object erzeugen willst.
Martin Altmann hat geschrieben:
AUGE_OHR hat geschrieben: b.) ein Presspace ist kein "Fenster" sondern "nur" ein Presspace
Natürlich ist ein PresSpace kein Fenster - aber ein PresSpace gehört
zu einem Fenster (genauer: zu einem Objekt vom Typ XbpWindow() )!

Also: Für jedes zu übergebene Bitmap ein Objekt vom Typ XbpWindow() (was auch immer Du nimmst...) erzeugen und in dem dazugehörigen PresSpace die Bitmap laden.
wie schon gesagt ich will das Object ja gar nicht "laden" um es anzuzeigen
sondern für L & L brauche ich das "handle" des Bitmap (nicht Object).
Ich kann also aus dem Beispiel von mir das oPS rausnehmen und es
funktioniert weiterhin.

Das "handle" mit :getHWND() (statt CreateBitmap) funktioniert mit
L & L nicht.

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 »

Jimmy,
Du kannst das doch create()n, aber :hidden() - oder 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: Du kannst das doch create()n, aber :hidden() - oder nicht?
aber ich brauch es doch gar nicht bzw. kann es nicht für L & L
verwenden. Laut Aussage von "Paulchen" (= Combit ?) kann man
kein BLOB an L & L direkt übergeben und mit einem Xbase++ Object
kann L & L auch nichts anfangen (bekomme nur eine Fehlermeldung).

so wie ich das jetzt sehe kann L & L mit Xbase++

a.) "externe" BMP/JPG/PNG (aber keine GIF) als "Variable" mit

Code: Alles auswählen

     LlDefineVariableExt(hJob,;
                      MyVar,;
                      MyContens,;
                      LL_DRAWING,0)
b.) "intern" wenn man das "handle" davon hat mit

Code: Alles auswählen

     LlDefineFieldExtHandle(hJob               ,;
                      MyField           ,;
                      MyHandle(MyContens) ,;
                      LL_DRAWING_HBITMAP  ,0)
wobei ich mich immer auf die "DataArea" beziehe.

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,
und genau auf Deinen Punkt b will ich ja hinaus...
Aber naja - mal schauen, was Rodd in der wishcollector-newsgroup noch so schreibt...

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
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,
zumindest hat Michael Hoffmann dort eben genau das gleiche wie ich geschrieben - nur ein wenig ausführlicher :)

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: zumindest hat Michael Hoffmann dort eben genau das gleiche wie ich geschrieben - nur ein wenig ausführlicher :)
Ja gelesen, aber ich verstehe noch nicht was SendMessageA dort macht.
Dummerweise kann ich es (noch) nicht ausprobieren weil ich nicht weiss
was SM_GETIMAGE für einen Wert hat und @goggle finde ich nichts ???

Ich habe meinen Source jetzt so vorbereitet:

Code: Alles auswählen

DLLFUNCTION SendMessageA(b1,b2,b3,b4) USING STDCALL FROM User32.DLL

LOCAL oPS  := XbpPresSpace():new():Create()
LOCAL oBmp := XbpBitmap():new():create(oPS) // hier mit oPS
      oBmp:setBuffer(MyContens,XBPBMP_FORMAT_WIN3X)
      a1 := oBmp:xSize
      a2 := oBmp:ySize

      oStatic := XbpStatic():new( ,,, {a1, a2 } )
      oStatic:caption := oBmp:setBuffer( ,XBPBMP_FORMAT_WIN3X)
      oStatic:create()

      Retvar1 := SendMessageA(oStatic:GetHwnd(),;
                                              SM_GETIMAGE,;
                                              IMAGE_BITMAP,;
                                              0 )
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

ausprobiert

Beitrag von AUGE_OHR »

hi,
folgenden Code hab mich nun verwendet

Code: Alles auswählen

#define STM_GETIMAGE        0x0173
#define IMAGE_BITMAP        0

DLLFUNCTION SendMessageA(b1,b2,b3,b4)    USING STDCALL FROM User32.DLL

FUNCTION BMPgetHND( MyContens )          // Memo Type "V"

LOCAL a1,a2,a3,a4,a5
LOCAL Retvar := ""
LOCAL oPS  := XbpPresSpace():new():Create()
LOCAL oBmp := XbpBitmap():new():create(oPS)

      oBmp:setBuffer(MyContens,XBPBMP_FORMAT_WIN3X)

      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)

      oStatic := XbpStatic():new( SetAppWindow(),;
                                                   ,;
                                {20,20}       ,;
                                {a1, a2 }     ,;
       {{XBP_PP_BGCLR,GRA_CLR_YELLOW}}   )

      oStatic:caption := oBmp
      oStatic:type    := XBPSTATIC_TYPE_BITMAP
      oStatic:create():show()

      Retvar := SendMessageA(oStatic:GetHwnd(),;
                               STM_GETIMAGE,;
                               IMAGE_BITMAP,;
                               0 )

*      oBmp:destroy()
*      oStatic:destroy()

RETURN Retvar
Ich sehe zwar mein STATIC wie er beim createn des Report mit L & L
wechselt aber im Preview/Report kommt nichts.

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

Beitrag von AUGE_OHR »

hi,

http://msdn2.microsoft.com/en-us/library/ms532305.aspx

den 5th. Parameter verstehe ich nicht. Ich "sehe" auch keinen Unterschied
wenn ich nur 4 Parameter verwende also wozu ist der gut ?
lpvBits
[in] Pointer to an array of color data used to set the colors in a rectangle of pixels. Each scan line in the rectangle must be word aligned (scan lines that are not word aligned must be padded with zeros). If this parameter is NULL, the contents of the new bitmap is undefined.
hat das irgendwas links "abgeschnitten" und rechts "angehängt" zu tun
(wegen dem "aligned" ) und was müsste man den da als 5th Parameter
verwenden ?

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

Beitrag von AUGE_OHR »

hi,

so langsam hab ich keine Lust mehr. Nachdem ich noch paar Tips von
Michael Hoffmann bekommen hatte, hab ich gehofft das es das ist aber
es war jedesmal einen Reinfall ... nur meine CreateBitmap API liefert
Ergebnisse (mit dem Fehlern).

Zu L & L 13 muss ich sagen das es OHNE Service Pack gar nicht geht
und mit Service Pack zeigt er eben den Fehler ...

Nun hab ich noch eine Antwort von Spirin Sergey (FRAX) erhalten
und dort kann man wohl Memo Type "V" mit Bitmaps verwenden !!!
Also geht es grundsätzlich mit Xbase++ Memo Type "V".

Ergo liegt das Problem wohl nicht (nur) bei Alaska sondern bei L & L 13
und dem Service Pack.

Dann kann ich das ganze wohl mit L & L vergessen den deren "Support"
scheint ja noch "schlechter" zu sein als der von Alaska und die Msg in
deren Forum erscheinen immer erst "verspätet" und werden wohl vorher
gelesen (zensiert ?) bevor die in die Newsgroup gelangen.

Natürlich kann es sein das ich die API CreateBitmap() falsch anwende
den ich hab immer noch nicht begriffen was der 5th Parameter soll.
lpvBits

[in] Pointer to an array of color data used to set the colors in a rectangle
of pixels. Each scan line in the rectangle must be word aligned (scan lines
that are not word aligned must be padded with zeros). If this parameter is
NULL, the contents of the new bitmap is undefined.
was für ein Array ? was ist mit aligned hier gemeint ?

Wenn ich nun den 5th Parameter weglasse sieht es so aus wie geschildert
Wenn ich dem 5th Parameter angebe (tja was angeben) scheint sich auch
nichts zu ändern ...

jemand noch eine Idee was der 5th Parameter sein könnte ?

gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Hallo Jimmy,
der "Support" bei L&L funktioniert über die Newsgroup gar nicht, alle die dort antworten sind auch nur User.
Viele Grüße
Wolfgang
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,
Wolfgang Ciriack hat geschrieben: der "Support" bei L&L funktioniert über die Newsgroup gar nicht, alle die dort antworten sind auch nur User.
Das der Support von L & L ziehmlich mies ist hab ich leider auch schon
erfahren. Auch gibt es für die "Standart" Version seit LL12 keinen 30
Tage Support mehr und bei den lächerlichen 3 Beispielen die mitgeliefert
werden kann man kaum was "lernen". Wenn ich nicht den Source von
Tom und der Devcon hätte würde L & L bei mir wohl nur ungeöffnet
rumliegen.

Dabei ist es für mich nun klar das es am "lates" Service Pack von LL13
liegt ... und ohne SP wird gar nichts angezeigt. Ich frage mich ob LL12
und die Version davor alle nicht in der Lage sind Memo Type "V" zu
verarbeiten und erst die 13th Version dazu in der Lage ist (wenn auch
mit BUG) ? Kann das wirklich sein das so ein Produkt dazu 13 Versionen
braucht ???

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

Beitrag von AUGE_OHR »

Nachtrag : habe eben mit Andreas Herdt gesprochen. Er meinte ob ich
es schon mal mit VB oder C versucht hätte. Leider hab ich weder VB
noch C installiert und wollte mal fragen ob hier im Forum vielleicht
jemand ist der auch L & L verwendet und das testen könnte.

gruss by OHR
Jimmy
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:

Re: Bitmap & Memo

Beitrag von brandelh »

Hi,

ein altes Thema, aber nun musste auch ich aus einer Resource BMP einen String machen der den BMP Header braucht.
Mit Wikipedia BMP HEADER Infos habe ich dieses hinbekommen. In der KB von Alaska habe ich es dann bestätigt bekommen, allerdings nutze ich lieber den direkten aufruf als Funktion ... ;-)

// NUR MIT BMP !!!

Code: Alles auswählen

cBMP := xbpBitmap():setBuffer()
cBMP += chr(0)+chr(0)  // dieses 2 Byte fehlen noch
cBMP_Header := "BM"+U2BIN(len(cBMP)+14)+W2BIN(0)+W2BIN(0)+U2BIN(BIN2U(left(cBMP,4))+14)
Ich musste allerdings feststellen, dass der Rückgabewert von xbpBitmap():setBuffer() nicht 14 sondern 16 Byte kürzer war als die BMP Datei selbst angibt. Hinten fehlte chr(0)+chr(0) ;-) außerdem ist das 3. letzte Byte verwändert.

Die neu erstellte BMP Datei sieht in Paint aber genauso aus und auch QuickPDF kommt damit zurecht.
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

Re: Bitmap & Memo

Beitrag von AUGE_OHR »

brandelh hat geschrieben:ein altes Thema
...
In der KB von Alaska habe ich es dann bestätigt bekommen
diese PDR ist gemeint http://www.alaska-software.com/scripts/ ... PDRID=6009
gruss by OHR
Jimmy
Antworten