Seite 1 von 1

Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 8:25
von mini990
Hallo,
ich verwende als Hintergrund für die Erfassung von Formularen die entsprechenden Formulare als Bitmap.
Diese sind fest in's Programm eingebunden. Die Bitmaps haben zwischen 1 und 4.5 MB
Nun "bläht" das die Größe der Exe ja ganz schön auf.
Ist es sinnvoller die Bitmaps beim öffnen der Masken von Festplatte zu laden?
Gibt's andere Alternativen?

Gruß Stefan

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 8:32
von AUGE_OHR
mini990 hat geschrieben: Do, 05. Jul 2018 8:25 Gibt's andere Alternativen?
eine Resource.DLL
siehe \SOURCE\samples\basics\Resource\

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 9:30
von Jan
Stefan,

das Problem kommt mir sehr bekannt vor. Hatte ich auch schon mit zu kämpfen.

Der Vorteil davon, die Bitmaps einzubinden, ist ja, das die nicht frei verfügbar auf der Festplatte rumliegen. Kann also keiner versehentlich oder absichtlich löschen. Der Nachteil ist natürlich, das die in der exe Platz weg nehmen.

Aber Du kannst Bitmaps ja auch als eigenständige Dateien von der Festplatte laden. Ich weiß jetzt nicht, wie Du die Grafiken holst und anzeigst. Aber XbpBitmap() als Beispiel bietet über :loadFile() die Möglichkeit, eine externe Datei einzulesen. Die Du dann ja ebenfalls als Hintergrund anzeigen kannst. Wie das in Deiner Situation aussieht müsste man extra betrachten.

Jan

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 10:45
von mini990
Gibt Es für die DLL-variante ein verständliches Beispiel?

Code: Alles auswählen

oDlg := XbpDialog():new( Appdesktop(), , aPos, aSize, , .F.)
oDlg:taskList := .T.
oDlg:title := "mein Fenster"
oDlg:create()
oDlg:load( ["meineDLL.DLL"], 5006 )
SetAppFocus( oDlg )
ergibt die Meldung:
methode ist für dieses Objekt unbekannt
Operation load

Gruß Stefan

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 10:51
von Jan
Stefan,

XbpDialog() kennt kein :load. Das muß scheitern.

Wie stellst Du denn jetzt das Hintergrundbild dar? Wenn Du da ein wenig Code postest, können wir das eventuell anpassen.

Jan

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 12:10
von mini990

Code: Alles auswählen

oDlg := XbpDialog():new( Appdesktop(), , aPos, aSize, , .F.)
oDlg:taskList := .T.
oDlg:title := "mein Fenster"
oDlg:drawingArea:bitmap := 100
oDlg:icon     := ICON_STAT32
oDlg:create()
SetAppFocus( oDlg )
Die Bitmap ist über ARC in die Exe eingebunden...

Gruß Stefan

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 12:16
von HaPe
Hallo Stefan !
Ist es sinnvoller die Bitmaps beim öffnen der Masken von Festplatte zu laden?
Gibt's andere Alternativen?
Müssen die Bitmaps denn überhaupt 1 bis 4,5 MB groß sein?
Geht da nicht ein anders Format mit zb. weniger Farben?

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 12:51
von mini990
Leider nein.
Zu 90% sind es ärztliche Formulare wie AU, Rezepte, Überweisungen etc.
Die Anwender arbeiten mit dem "richtigen" Formular lieber als mit einem abstrakt dargestellten...

Gruß Stefan

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 13:25
von HaPe
Hallo Stefan !
Die Anwender arbeiten mit dem "richtigen" Formular lieber als mit einem abstrakt dargestellten...
Klar, aber muss zb. ein Schwarz/Weiß-Formular 32bit-Farben haben oder so.
Lass mir doch mal dein 4,5 MB Bitmap zukommen, da kann man an der Auflösung bestimmt was drehen ohne dass der Anwender davon etwas merkt.

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 13:50
von ramses
Wandle die BMP doch JPG um. Die benötigen viel viel weniger Platz.

Gruss Carlo

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 14:55
von mini990
@HaPe:
manchmal hat man Riesenbretter vor den Augen. Gerade die großen Bilddateien waren schwarz-weiß.
Farbtiefe geändert. Statt 4,6MB nun noch 1.5MB

Trotzdem bleibt das Problem bestehen. Es sind ca. 95 Formulare zwischen A6 (ca 700KB) und A4 (ca. 1.5MB)
Offen ablegen und bei Bedarf laden möchte ich nicht, da das Problem DAU real existiert.... :oops:

Gruß Stefan

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 14:59
von Tom
Pack sie doch in eine Tabelle.

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 15:21
von HaPe
Hallo Stefan !
... und bei Bedarf laden möchte ich nicht, da das Problem DAU real existiert.... :oops:
Pack sie doch in eine Tabelle.
... die von einem Service-Programm immer geöffnet ist damit die auch keiner weglöschen kann :badgrin:

Re: Bitmaps als Maskenhintergrund

Verfasst: Do, 05. Jul 2018 21:54
von AUGE_OHR
mini990 hat geschrieben: Do, 05. Jul 2018 12:10 Die Bitmap ist über ARC in die Exe eingebunden...
wenn du die Bilder in eine seperate DLL packst ist der Aufruf mit der Resource ID der selbe.
wenn du über XbpBitmap():Load() gehst muss statt NIL der Name der DLL angegeben werden.
---
ein Bitmap auf der o:DrawingArea hat IMHO re-paint Probleme.
probiere mal aus was passiert wenn du auf eine andere App gehst die über deiner App läuft und dann wieder zurück.

ich nehme immer erst eine XbpStatic und da den o:Paint Slot was auch bei einem "resize" funktioniert

Re: Bitmaps als Maskenhintergrund

Verfasst: Sa, 07. Jul 2018 9:41
von mini990
Wenn ich das so mache kommt kein Bild....

Code: Alles auswählen

oDlg := XbpDialog():new( Appdesktop(), , aPos, aSize, , .F.)
oDlg:taskList := .T.
oDlg:title := "Mein Programm"
oDlg:drawingArea:bitmap := ("MEINEDLL.DLL", 5006 )
oDlg:create()
SetAppFocus( oDlg )
Muss ich die DLL vorher mit DLLOAD() laden?

Gruß Stefan

Re: Bitmaps als Maskenhintergrund

Verfasst: Sa, 07. Jul 2018 10:36
von Wolfgang Ciriack
Da fehlt was:

Code: Alles auswählen

oDlg:drawingArea:bitmap := ("MEINEDLL.DLL", 5006 )
müsste sein:

Code: Alles auswählen

oDlg:drawingArea:bitmap := XbpBitmap:load("MEINEDLL.DLL", 5006 )

Re: Bitmaps als Maskenhintergrund

Verfasst: Sa, 07. Jul 2018 19:01
von mini990
Hallo Wolfgang,
nein, funktioniert leider nicht.
unbekannte Variable XbpBitmap
verwende ich XbpBitmap() dann kommt ein Fehler:
Zugriff auf Instanz Methode nicht erlaubt
Operation:load

gruß Stefan

Re: Bitmaps als Maskenhintergrund

Verfasst: Sa, 07. Jul 2018 19:37
von AUGE_OHR
zeig und doch bitte mal dein *.ARC Files, Danke

Re: Bitmaps als Maskenhintergrund

Verfasst: Sa, 07. Jul 2018 19:45
von Jan
Stefan,

klar. XbpBitmap ist ja auch keine Variable, sondern eine Klasse. Schau mal in der Hilfe unter XbpBitmap() nach.

Jan

Re: Bitmaps als Maskenhintergrund

Verfasst: Sa, 07. Jul 2018 19:46
von Jan
Jimmy,

was hat das Laden einer Grafik aus einer DLL mit der ARC zu tun? Genau davon möchte Stefan ja gerade weg.

Jan

Re: Bitmaps als Maskenhintergrund

Verfasst: So, 08. Jul 2018 0:01
von AUGE_OHR
habe mit oDlg:drawingArea:Bitmap mal weiter getestet
in den Demos lege ich das Object vorher an

Code: Alles auswählen

LOCAL oBmp    := XbpBitmap():New():Create()
diese beiden Syntax Version funktionieren NICHT

Code: Alles auswählen

*   oDlg:drawingArea:Bitmap := oBmp:Load(,1234 )
   oDlg:drawingArea:Bitmap := oBmp:Load("Resource.DLL",1234 )
   oDlg:create()
bei diese beiden Syntax Version funktionieren es

Code: Alles auswählen

*   oBmp:Load(,1234 )
   oBmp:Load("Resource.DLL",1234 )
   oDlg:drawingArea:Bitmap := oBmp
   oDlg:create()
man MUSS die Syntax in 2 Schritten ausführen da
o:load( [<cDLLname>], <nID> ) --> lSuccess
ein logischen Wert zurück gibt :!:

Re: Bitmaps als Maskenhintergrund

Verfasst: So, 08. Jul 2018 10:39
von mini990
@Jimmy:
Vielen Dank! Genau das war's

Die Lösung sieht nun so aus:

Für XbpDialog:

Code: Alles auswählen

oBmp:Load("PRISMA32.DLL", 5006 )
oDlg := XbpDialog():new( Appdesktop(), , aPos, aSize, , .F.)
oDlg:taskList := .T.
oDlg:title := "PRISMA32 Statistik"
oDlg:drawingArea:Bitmap := oBmp
oDlg:icon     := ICON_STAT32
oDlg:create()
SetAppFocus( oDlg )
Für XbpStatic:

Code: Alles auswählen

oFormular := XbpStatic():new( odlg, , {0,0}, {613,470} ) 
oFormular:caption:= NIL
oFormular:DLLNAME:="PRISMA32.DLL"
oFormular:clipSiblings := .T.
oFormular:type := XBPSTATIC_TYPE_BITMAP
oFormular:create()
oFormular:SetCaption( FMUSTER55 )
Das Ergebnis:
Exe Grafiken mit ARC eingebunden: 96 MB
EXE Grafiken über DLL 27 MB
Größe DLL-Datei 69 MB

Schönen Sonntag noch....

Gruß Stefan

Re: Bitmaps als Maskenhintergrund

Verfasst: So, 08. Jul 2018 16:14
von AUGE_OHR
mini990 hat geschrieben: So, 08. Jul 2018 10:39 Für XbpStatic:

Code: Alles auswählen

oFormular := XbpStatic():new( odlg, , {0,0}, {613,470} ) 
oFormular:caption:= NIL
oFormular:DLLNAME:="PRISMA32.DLL"
oFormular:clipSiblings := .T.
oFormular:type := XBPSTATIC_TYPE_BITMAP
oFormular:create()
oFormular:SetCaption( FMUSTER55 )
was ist

Code: Alles auswählen

oFormular:DLLNAME:=
für eine Syntax :?:

ich würde es mit einem Object, wie oben, machen und es als o:Caption setzen.

Re: Bitmaps als Maskenhintergrund

Verfasst: So, 08. Jul 2018 18:37
von Werner_Bayern
XbpIWindow:dllName
Name of the DLL file containing the background bitmap