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: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Bitmaps als Maskenhintergrund

Beitrag von mini990 » Do, 05. Jul 2018 8:25

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: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Bitmaps als Maskenhintergrund

Beitrag von AUGE_OHR » Do, 05. Jul 2018 8:32

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: 13144
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Bitmaps als Maskenhintergrund

Beitrag von Jan » Do, 05. Jul 2018 9:30

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: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Bitmaps als Maskenhintergrund

Beitrag von mini990 » Do, 05. Jul 2018 10:45

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: 13144
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Bitmaps als Maskenhintergrund

Beitrag von Jan » Do, 05. Jul 2018 10:51

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: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Bitmaps als Maskenhintergrund

Beitrag von mini990 » Do, 05. Jul 2018 12:10

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
Foren-Moderator
Foren-Moderator
Beiträge: 546
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz

Re: Bitmaps als Maskenhintergrund

Beitrag von HaPe » Do, 05. Jul 2018 12:16

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

Organisator der XUG Stuttgart
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

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

Re: Bitmaps als Maskenhintergrund

Beitrag von mini990 » Do, 05. Jul 2018 12:51

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
Foren-Moderator
Foren-Moderator
Beiträge: 546
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz

Re: Bitmaps als Maskenhintergrund

Beitrag von HaPe » Do, 05. Jul 2018 13:25

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

Organisator der XUG Stuttgart
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1089
Registriert: Mi, 28. Jul 2010 17:16

Re: Bitmaps als Maskenhintergrund

Beitrag von ramses » Do, 05. Jul 2018 13:50

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

Gruss Carlo

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

Re: Bitmaps als Maskenhintergrund

Beitrag von mini990 » Do, 05. Jul 2018 14:55

@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: 7333
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Bitmaps als Maskenhintergrund

Beitrag von Tom » Do, 05. Jul 2018 14:59

Pack sie doch in eine Tabelle.
Herzlich,
Tom

Benutzeravatar
HaPe
Foren-Moderator
Foren-Moderator
Beiträge: 546
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz

Re: Bitmaps als Maskenhintergrund

Beitrag von HaPe » Do, 05. Jul 2018 15:21

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

Organisator der XUG Stuttgart
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Bitmaps als Maskenhintergrund

Beitrag von AUGE_OHR » Do, 05. Jul 2018 21:54

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: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Bitmaps als Maskenhintergrund

Beitrag von mini990 » Sa, 07. Jul 2018 9:41

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: 2435
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: Bitmaps als Maskenhintergrund

Beitrag von Wolfgang Ciriack » Sa, 07. Jul 2018 10:36

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: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Bitmaps als Maskenhintergrund

Beitrag von mini990 » Sa, 07. Jul 2018 19:01

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: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Bitmaps als Maskenhintergrund

Beitrag von AUGE_OHR » Sa, 07. Jul 2018 19:37

zeig und doch bitte mal dein *.ARC Files, Danke
gruss by OHR
Jimmy

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13144
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Bitmaps als Maskenhintergrund

Beitrag von Jan » Sa, 07. Jul 2018 19:45

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: 13144
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Bitmaps als Maskenhintergrund

Beitrag von Jan » Sa, 07. Jul 2018 19:46

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: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Bitmaps als Maskenhintergrund

Beitrag von AUGE_OHR » So, 08. Jul 2018 0:01

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: 502
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Bitmaps als Maskenhintergrund

Beitrag von mini990 » So, 08. Jul 2018 10:39

@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: 11515
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Bitmaps als Maskenhintergrund

Beitrag von AUGE_OHR » So, 08. Jul 2018 16:14

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: 1549
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Bitmaps als Maskenhintergrund

Beitrag von Werner_Bayern » So, 08. Jul 2018 18:37

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

Werner

Antworten