Bitmaps als Maskenhintergrund

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Bitmaps als Maskenhintergrund

Beitrag 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
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: Bitmaps als Maskenhintergrund

Beitrag von AUGE_OHR »

mini990 hat geschrieben: Do, 05. Jul 2018 8:25 Gibt's andere Alternativen?
eine Resource.DLL
siehe \SOURCE\samples\basics\Resource\
gruss by OHR
Jimmy
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:

Re: Bitmaps als Maskenhintergrund

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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
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:

Re: Bitmaps als Maskenhintergrund

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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?
--
Hans-Peter
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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.
--
Hans-Peter
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag von ramses »

Wandle die BMP doch JPG um. Die benötigen viel viel weniger Platz.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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
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:

Re: Bitmaps als Maskenhintergrund

Beitrag von Tom »

Pack sie doch in eine Tabelle.
Herzlich,
Tom
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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:
--
Hans-Peter
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: Bitmaps als Maskenhintergrund

Beitrag 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
gruss by OHR
Jimmy
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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
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:

Re: Bitmaps als Maskenhintergrund

Beitrag 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 )
Viele Grüße
Wolfgang
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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
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: Bitmaps als Maskenhintergrund

Beitrag von AUGE_OHR »

zeig und doch bitte mal dein *.ARC Files, Danke
gruss by OHR
Jimmy
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:

Re: Bitmaps als Maskenhintergrund

Beitrag von Jan »

Stefan,

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

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied 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:

Re: Bitmaps als Maskenhintergrund

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied 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

Re: Bitmaps als Maskenhintergrund

Beitrag 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 :!:
gruss by OHR
Jimmy
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag 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
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: Bitmaps als Maskenhintergrund

Beitrag 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.
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Bitmaps als Maskenhintergrund

Beitrag von Werner_Bayern »

XbpIWindow:dllName
Name of the DLL file containing the background bitmap
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten