Source/ Codesnippets | | | | Jörg Sellmeyer | je hab maintenant via Ole (Dank à Andreas Miethe - toujours wieder) un funktionierendes Handle pour Bitmaps (aussi gif, ico et diverse autre Formate) ermitteln peut, cela ensuite entier normal sur einem Bitmapstatic angezeigt volonté peux. avec qui Ermittlung qui Taille peux je mich dans dem le cas encore pas entier anfreunden. qui là une concept hat - im Code ist qui Stelle markiert.
ici jedenfalls erstmal qui Code, um un gültiges Handle aussi pour grand Bilder trop conservé. si on es im Programme häufiger verwendet, ist es sûrement sinnvoller, qui Init-Routine seulement einmal am Anfang aufzurufen, mais so funktioniert es déjà la fois klaglos. s'il te plaît la fois avec Fichiers größer comme 5100 Pixeln testen. Aktuell habe je es seulement avec jpg et gif probiert. Icos sommes oui größenmäßig pas cela Problem.
$H windows.ph
'Konstanten
DEF &Picture_Release 8
DEF &Picture_GetHandle 12
DEF &Picture_GetType 20
DEF &Picture_Get_Width 24
DEF &Picture_Get_Height 28
DEF &Picture_Render 32
DEF &Picture_Select 44
'Globale Variablen
DECLARE IID_IPicture#
DECLARE PData#
DECLARE HMEM&
Déclarer OlePic#
Class OleImage = OleImage@,\
Ole_Init@,\
Ole_Free@,\
Ole_LoadImage@,\
Ole_GetType@,\
Ole_GetHandle@,\
Ole_FreeImage@,\
OLE32&,\
OLEPro32&,\
PictureObject&,\
hPic&,\
PicFormat&,\
Width&,\
Height&,\
GetSize@,\
Destroy@
Proc OleImage.OleImage
Paramètres File$
.Ole_Init()
.PictureObject& = .Ole_LoadImage(File$)
.PicFormat& = .Ole_GetType(.PictureObject&)
.hPic& = .Ole_GetHandle()
Imprimer .PictureObject&,.PicFormat&,.hpic&
ENDPROC
Proc OleImage.Ole_Init
.OLE32& = UseDll("OLE32")
.OLEPRO32& = UseDll("OLEPRO32")
Externe("OLE32","OleInitialize",0)
Faible IID_IPicture#,16
Long IID_IPicture#,0 = $7BF80980
Word IID_IPicture#,4 = $BF32
Word IID_IPicture#,6 = $101A
Byte IID_IPicture#,8 = $8B
Byte IID_IPicture#,9 = $BB
Byte IID_IPicture#,10 = $00
Byte IID_IPicture#,11 = $AA
Byte IID_IPicture#,12 = $00
Byte IID_IPicture#,13 = $30
Byte IID_IPicture#,14 = $0C
Byte IID_IPicture#,15 = $AB
ENDPROC
Proc OleImage.Ole_Free
~GlobalFree(Hmem&)
Externe("OLE32","OleUninitialize")
FreeDll .OLE32&
FreeDll .OLEPRO32&
DISPOSE IID_IPicture#
ENDPROC
Proc OleImage.Ole_LoadImage
Déclarer MemPointer&,PStream&,PictureObject&,PSize&
Paramètres Picture$
'------------------------
Set("Filemode", 0)
PSIZE& = Filesize(Picture$)
Faible PData#,PSIZE&
BlockRead(Picture$,PData#,0,PSIZE&)'données dans Bereichsvariable einlesen
'------------------------
~GlobalFree(Hmem&)
HMem& = ~GlobalAlloc($022,PSize&)'grenier reservieren
Mempointer& = ~GlobalLock(Hmem&)'Pointer sur grenier
~RtlMoveMemory(MemPointer&,PData#,PSize&)'Bereichsvariable dans grenier schieben
DISPOSE PData#'Bereichsvariable freigeben
~GlobalUnlock(HMem&)'grenier zum Gebrauch freigeben
Externe("Ole32","CreateStreamOnHGlobal",Hmem&,1,addr(PStream&))'Stream-Pointer erstellen
Externe("OlePro32","OleLoadPicture",PStream&,PSIZE&,0,IID_IPicture#,ADDR(PictureObject&))'Pointer pour Pictureobject
'------------------------
Cas PictureObject& > 0 : Retour PictureObject&
Cas PictureObject& = 0 : Retour 0
ENDPROC
Proc OleImage.Ole_GetType
Déclarer Command&,PicFormat&
Command& = Long(.PictureObject&,0)
Call(@Long(Command&,&Picture_GetType),.PictureObject&,addr(PicFormat&))
Retour PicFormat&
ENDPROC
Proc OleImage.GetSize
Paramètres DC&
Déclarer Command&,w&,h&,xpixels&,ypixels&
Command& = Long(.PictureObject&,0)
'ici wird qui Bildschirmauflösung pro douane abgefragt - chez mir 96x96.
'Allerdings sais je pas, quelle Funktion dans quel dll là angesprochen wird.
Call(@Long(Command&,&Picture_Get_Width),.PictureObject&,addr(w&))
Call(@Long(Command&,&Picture_Get_Height),.PictureObject&,addr(h&))
'qui Taille des Fensters wird ermittelt
xpixels& = ~GetDeviceCaps(DC&, 88)
ypixels& = ~GetDeviceCaps(DC&, 90)
'change qui Bildschirmauflösung sur qui Fenstergröße.
'je hab allerdings je n'en sais rien, comment qui Wert 2540 zustande venez.
.Width& = Round((w&*xpixels&)/2540,0)
.Height& = Round((h&*ypixels&)/2540,0)
ENDPROC
Proc OleImage.Ole_GetHandle
Déclarer Command&,PicHandle&
Command& = Long(.PictureObject&,0)
Call(@Long(Command&,&Picture_GetHandle),.PictureObject&,addr(PicHandle&))
Retour PicHandle&
ENDPROC
Proc OleImage.Ole_FreeImage
Paramètres PictureObject&
Déclarer Command&
Command& = Long(PictureObject&,0)
Call(@Long(Command&,&Picture_Release),PictureObject&)
ENDPROC
Proc OleImage.Destroy
DeleteObject .hPic&,.PictureObject&
.Ole_Free()
ENDPROC
Déclarer hbtn&,Bild$,hFont&,Anzeige&,OleAnzeige&,TestHandle&
Utilisateur Messages $10
~SetWindowLong(%hwnd,~GWL_STYLE,(~GetWindowLong(%hwnd,~GWL_STYLE) | $300000))
Fenêtre %maxx,%maxy
Titre de la fenêtre "Handle per OLE"
hFont& = Créer("Font","Western ",14,0,0,0,0)
SetDialogFont hFont&
hbtn& = Créer("Button",%hwnd,"Bild laden",%maxx-80,40,60,24)
WhileNot %clé = 27'ESC finissez cela Programme
Si GetText $(%hwnd) <> "Handle per OLE"
WaitInput 4000
Titre de la fenêtre "Handle per OLE"
ShowWindow(hbtn&,5)
EndIf
WaitInput
Cas %uMessage = $10:Pause
Si Clicked(hbtn&)
Bild$ = LoadFile$("ÖFFNE","alle unterstützten Formate|*.dib;*.bmp;*.rle;*.jpe;*.jpeg;*.jpg;*.gif;*.ico;*.cur;*.emf;*.wmf|\
Bitmap (bmp,rle,dib)|*.bmp;*.rle;*.dib|Jpeg (jpg,jpe,jpeg)|*.jpg;*.jpe;*.jpeg|Gif (gif)|*.gif|\
Enhanced Metafile (emf)|*.emf|Metafile (wmf)|*.wmf|Icônes (Ico)|*.ico|Cursor (cur)|*.cur")
Si Bild$ > »
TestHandle& = Créer(«PCSI»,-1,Bild$)
'chez grand Bildern ist ici cela Ergebnis 0
Titre de la fenêtre Str$(TestHandle&) + " chez très grand Bildern ist cela Ergebnis ici 0"
DeleteObject TestHandle&
Si SizeOf(OlePic#)
DestroyWindow(OleAnzeige&)
OlePic#.Destroy()
Dispose OlePic#
EndIf
OlePic# = New(OleImage,Bild$)
Si Anzeige&
DestroyWindow(Anzeige&)
waitinput
Cls
EndIf
With OlePic#
'qui Handleermittlung via Ole bringt un verwertbares Handle:
OlePic#.GetSize(%hdc2)
Imprimer .Width&,.Height&,"Typ:",.Ole_GetType()
Si .PicFormat& = 1
OleAnzeige& = Créer("Bitmap",%hwnd,.hPic&,0,0)
.GetSize(%hdc2)
Imprimer .Width&,OlePic#.Height&
ElseIf .PicFormat& = 3
Imprimer "Icon ist Typ:",.PicFormat&,"und peux plus rapide avec Profanmitteln angezeigt volonté."
EndIf
EndWith
EndIf
EndIf
Wend
Si SizeOf(OlePic#)
OlePic#.Destroy()
Dispose OlePic#
EndIf
DeleteObject hFont&
Fin
Basierend sur diesem Code [...] de Andreas Methe |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 03.06.2020 ▲ |
| |
| | Matthias Arlt | chez mir suffisant un ' sleep 100 ' avant dem ' with OlePic# '. évident braucht qui vorhergehende Aktion un paire ms Zeit. chez den ms ist encore air pour unten. Möglicherweise ist cela systemabhängig. qui Bildgröße écoutes là wohl aucun rôle. |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 03.06.2020 ▲ |
| |
| | Jörg Sellmeyer | Eigentlich erstaunlich, dass es ensuite funktioniert, là je là schlicht une faute gemacht habe. Es muss appeler: Cas Anzeige&: DestroyWindow(Anzeige&) merci pour Testen. Ist maintenant korrigiert. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 04.06.2020 ▲ |
| |
| | Michael W. | 2,54 ist qui Umrechnungswert inch pour cm
PictureObject est un StreamObjekt cela là erzeugt wird. et entier offensichtlich erbt cet StreamObjekt un objet, dessen Methoden ensuite zum Abfragen qui Taille et weiterer Dinge verwendet volonté peut.
là wir chez unseren Objekten aucun aiguille et ne...aucune THIS avons, peut wir cet Objekte malheureusement dans XProfan pas comment simple Objekte handhaben.
Créer(«PCSI»: la hâte Du la fois geschaut, quelle Dateitypen là qui zéro erzeugen? Offensichtlich ist qui Funktion pas so vielseitig comment OLE.
qui Funktion Créer("Bitmap",... wird 2x hintereinander aufgerufen.
--- Nachtrag: je hatte gehofft, cela .Ole_GetType quelque chose sinnvolles liefert. mais je erhielt avec allem une 1 geliefert. .ico/.cur führt zum Absturz, quoique es chez den ladbaren Typen aufgeführt ist.
ici qui Test-Source:
$H windows.ph
'Konstanten DEF &Picture_Release 8 DEF &Picture_GetHandle 12 DEF &Picture_GetType 20 DEF &Picture_Get_Width 24 DEF &Picture_Get_Height 28 DEF &Picture_Render 32 DEF &Picture_Select 44
'Globale Variablen 'DECLARE OLE32&,OLEPRO32& DECLARE IID_IPicture# DECLARE PData# DECLARE HMEM& Déclarer OlePic#
Class OleImage = OleImage@,\ Ole_Init@,\ Ole_Free@,\ Ole_LoadImage@,\ Ole_GetType@,\ Ole_GetHandle@,\ Ole_FreeImage@,\ OLE32&,\ OLEPro32&,\ PictureObject&,\ hPic&,\ PicFormat&,\ Width&,\ Height&,\ GetSize@,\ Destroy@
Proc OleImage.OleImage Paramètres File$ .Ole_Init() .PictureObject& = .Ole_LoadImage(File$) .PicFormat& = .Ole_GetType(.PictureObject&) .hPic& = .Ole_GetHandle() ENDPROC
Proc OleImage.Ole_Init .OLE32& = UseDll("OLE32") .OLEPRO32& = UseDll("OLEPRO32") Externe("OLE32","OleInitialize",0) Faible IID_IPicture#,16 Long IID_IPicture#,0 = $7BF80980 Word IID_IPicture#,4 = $BF32 Word IID_IPicture#,6 = $101A Byte IID_IPicture#,8 = $8B Byte IID_IPicture#,9 = $BB Byte IID_IPicture#,10 = $00 Byte IID_IPicture#,11 = $AA Byte IID_IPicture#,12 = $00 Byte IID_IPicture#,13 = $30 Byte IID_IPicture#,14 = $0C Byte IID_IPicture#,15 = $AB ENDPROC
Proc OleImage.Ole_Free ~GlobalFree(Hmem&) Externe("OLE32","OleUninitialize") FreeDll .OLE32& FreeDll .OLEPRO32& DISPOSE IID_IPicture# ENDPROC
Proc OleImage.Ole_LoadImage Déclarer MemPointer&,PStream&,PictureObject&,PSize& Paramètres Picture$ '------------------------ Set("Filemode", 0) PSIZE& = Filesize(Picture$) Faible PData#,PSIZE& BlockRead(Picture$,PData#,0,PSIZE&)'données dans Bereichsvariable einlesen '------------------------ ~GlobalFree(Hmem&) HMem& = ~GlobalAlloc($022,PSize&)'grenier reservieren Mempointer& = ~GlobalLock(Hmem&)'Pointer sur grenier ~RtlMoveMemory(MemPointer&,PData#,PSize&)'Bereichsvariable dans grenier schieben DISPOSE PData#'Bereichsvariable freigeben ~GlobalUnlock(HMem&)'grenier zum Gebrauch freigeben Externe("Ole32","CreateStreamOnHGlobal",Hmem&,1,addr(PStream&))'Stream-Pointer erstellen Externe("OlePro32","OleLoadPicture",PStream&,PSIZE&,0,IID_IPicture#,ADDR(PictureObject&))'Pointer pour Pictureobject '------------------------ Cas PictureObject& > 0 : Retour PictureObject& Cas PictureObject& = 0 : Retour 0 ENDPROC
Proc OleImage.Ole_GetType Déclarer Command&,PicFormat& Command& = Long(.PictureObject&,0) Call(@Long(Command&,&Picture_GetType),.PictureObject&,addr(PicFormat&)) Retour PicFormat& ENDPROC
Proc OleImage.GetSize 'ici plonger pour mich un paire ungelöste Fragen sur. Paramètres DC& Déclarer Command&,w&,h&,xpixels&,ypixels& Command& = Long(.PictureObject&,0) 'ici wird qui Bildschirmauflösung pro douane abgefragt - chez mir 96x96. 'Allerdings sais je pas, quelle Funktion dans quel dll là angesprochen wird. Call(@Long(Command&,&Picture_Get_Width),.PictureObject&,addr(w&)) Call(@Long(Command&,&Picture_Get_Height),.PictureObject&,addr(h&)) 'qui Taille des Fensters wird ermittelt xpixels& = ~GetDeviceCaps(DC&, 88) ypixels& = ~GetDeviceCaps(DC&, 90) 'change qui Bildschirmauflösung sur qui Fenstergröße. 'je hab allerdings je n'en sais rien, comment qui Wert 2540 zustande venez. .Width& = Round((w&*xpixels&)/2540,0) .Height& = Round((h&*ypixels&)/2540,0) ENDPROC
Proc OleImage.Ole_GetHandle Déclarer Command&,PicHandle& Command& = Long(.PictureObject&,0) Call(@Long(Command&,&Picture_GetHandle),.PictureObject&,addr(PicHandle&)) Retour PicHandle& ENDPROC
Proc OleImage.Ole_FreeImage Paramètres PictureObject& Déclarer Command& Command& = Long(PictureObject&,0) Call(@Long(Command&,&Picture_Release),PictureObject&) ENDPROC
Proc OleImage.Destroy DeleteObject .hPic&,.PictureObject& .Ole_Free() ENDPROC
Déclarer hbtn&,Bild$,hFont&,Anzeige&,TestHandle& Utilisateur Messages $10 Cls ShowMax hFont& = Créer("Font","Western ",14,0,0,0,0) SetDialogFont hFont& hbtn& = Créer("Button",%hwnd,"Bild magasin",%maxx-70,40,60,24)
'### zugefuegt ### Déclarer szTXT&, typ1TXT&, typ2TXT&, typ2$ szTXT& = Créer("Text",%hwnd,"1000x1000",%maxx-70,40+30,60,24) typ1TXT& = Créer("Text",%hwnd,"&bildtyp",%maxx-70,40+30+30,60,24) typ2TXT& = Créer("Text",%hwnd,"$bildtyp",%maxx-70,40+30+30+30,60,24) '###
WhileNot %clé = 27 'ESC finissez cela Programme WaitInput Cas %uMessage = $10 : Pause
Si Clicked(hbtn&) Bild$ = LoadFile$("ÖFFNE","alle unterstützten Formate|*.dib;*.bmp;*.rle;*.jpe;*.jpeg;*.jpg;*.gif;*.ico;*.cur;*.emf;*.wmf|\ Bitmap (bmp,rle,dib)|*.bmp;*.rle;*.dib|Jpeg (jpg,jpe,jpeg)|*.jpg;*.jpe;*.jpeg|Gif (gif)|*.gif|\ Enhanced Metafile (emf)|*.emf|Metafile (wmf)|*.wmf|Icons (Ico)|*.ico|Cursor (cur)|*.cur")
Si Bild$ > "" '### zugefuegt ### typ2$ = Right$(Bild$,6) '6 à cause de .tiff, .jpeg typ2$ = Substr$(typ2$, 2, ".") '### TestHandle& = Créer("hPic",-1,Bild$) 'chez très grand Bildern ist ici cela Ergebnis 0 Titre de la fenêtre Str$(TestHandle&) + " Handle. chez très grand Bildern ist cela Ergebnis ici 0" DeleteObject TestHandle&
Si SizeOf(OlePic#) OlePic#.Destroy() Dispose OlePic# EndIf
OlePic# = New(OleImage,Bild$) Cas Anzeige&: DestroyWindow(Anzeige&) With OlePic# '### ici était 2. Créer("Bitmap" 'qui Handleermittlung via Ole bringt un verwertbares Handle: Anzeige& = Créer("Bitmap",%hwnd,.hPic&,0,0) OlePic#.GetSize(%hdc2) '### zugefuegt ### 'Imprimer .Width&,.Height& SetText szTXT&, Trim$(Str$(.Width&) + "x" + Str$(.Height&)) SetText typ1TXT&, Trim$(Str$(.PicFormat&)) SetText typ2TXT&, Trim$(typ2$) '### EndWith EndIf EndIf Wend
Si SizeOf(OlePic#) OlePic#.Destroy() Dispose OlePic# EndIf DeleteObject hFont&
Fin
|
| | | System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 05.06.2020 ▲ |
| |
| | Jörg Sellmeyer | Um Ico et autre Formate ca va mir ici gar pas. je versuche, une Ansatz trop liefern, comment on grand Bilder (qui heutzutage avec chaque Handy im Megapixelbereich gemacht volonté) avec Profan Montrer peux. qui kleinen Formate marcher oui bien avec (Créer(...)). cela une zuviel c'est moi beim letzten Kontrollgang durchgerutscht. - ist mais aussi unerheblich.
Entscheidend est un Test avec Bildern (jpg) avec mindestens 3000 x 2000 Pixeln ou bien so. dans dem Bereich bekommt on avec Créer(...) plan ne...aucune gültiges Handle plus, mais seulement encore zéro et peux conforme à cela aussi weder Montrer, encore irgendwelche Werte auslesen. Wobei Profan déjà chez viel kleineren Bildern kneift. qui frontière liegt chez etwa 1 Mio Pixeln gesamt. quoi plan heutzutage un Witz ist.
avec Ole allez cela mais. cela korrekte Handle peut sich sur einem profaneigenen Créer("Bitmap",...) Montrer et qui Maße laisser sich ensuite plan aussi (si aussi compliqué) ermitteln. je hab dessus la fois une korrigierten Code reingesetzt. sur qui Inch-change hätte je aussi venons peut, comme ehemaliger Tischler - merci pour den Hinweis. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.06.2020 ▲ |
| |
| | Michael W. | 2592x1944 2448x3264 (de qui sais je encore, qui hat 9 MB) wird chez mir alles avec negativem handle angezeigt.
cela Scrollen peux on avec einem scrollbaren Hintergrund erreichen. là gibts irgendwie "scrollable Gadget" ou bien so.
qui Testteil peux raus, weil Ole cela oui im Griff hat. |
| | | System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 05.06.2020 ▲ |
| |
| | Matthias Arlt | peux je seulement bestätigen... Mehrfachtest avec Bildern größer comme ca. 4000x3000 problemlos et durchgängig avec negativem Hdl. |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 05.06.2020 ▲ |
| |
| | Jörg Sellmeyer | cela negative hdl ist pas ungewöhnlich. Gibt es aussi chez kleineren Bildern avec profaneigenen Mitteln toujours la fois wieder. mais joli, dass es anscheinend problemlos klappt.
je werde le reste comme objet fertig faire. Lieber wäre mir mais, si Roland qui prochain Profanversion so aufbohrt, dass ensuite aussi grand Bilder avec cela ladbar sommes.
une solche Funktion comme externe Possibilité führt seulement trop doppelten Aktionen, si on feststellt, dass Profan ne...aucune négoce erzeugen peux ou bien pouvoir im Prinzip qui Créer(«PCSI»,...) Funktion überflüssig, quoi oui aussi pas Sinn qui l'affaire ist. |
| | | | |
| | Matthias Arlt | Hm...chez mir allez cela avec plan cette grand Bildern aussi dans reinem Profan. Grad la fois vite sous 11.2 getestet (wieder avec größer 4000x3000)
declare btn&,pic$,hPic&,hBmp&
window 0,0-%maxx,(%maxy-30)
btn&=create("BUTTON",%hwnd,"Bild...",20,20,60,22)
tandis que 1
waitinput
si clicked(btn&)
pic$=LoadFile$("Bild magasin...","*.*")
si FileExists(pic$)
cas hPic& : deleteobject hPic&
cas hBmp& : destroywindow(hBmp&)
hPic&=Créer(«PCSI»,-1,pic$)
hBmp&=Créer("Bitmap",%hwnd,hPic&,0,0)
endif
endif
Wend
cas hPic& : deleteobject hPic&
ou bien je hab peut-être. cela Problem mißverstanden !? |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 05.06.2020 ▲ |
| |
| | Jörg Sellmeyer | Probier la fois que voici: [...] |
| | | | |
| | Matthias Arlt | Hab je maintenant probiert. intéressant ist ici oui seulement qui größte Auflösung. réellement steigt Profan dabei aus. Verkleinere je eh bien cet Bild avec IrfanView sur ca. 90 Prozent seiner Taille, ensuite klappt cela aussi wieder avec Profan. Demnach ist qui verarbeitbare frontière pour Profan chez rund 8000x8000.
Nachtrag: je suis encore la fois den ungekehrten Weg gegangen et hab eines meiner eigenen Bilder sur sur 8000 vergrößert. aussi là steigt Profan ensuite aus. alors liegt là wohl cela maximum Machbare.
Nachtrag 2: et weil je cela eh bien oui c'est ca savons voulais, hab je mich la fois per MCLS à l' Limit qui Speicherbitmap herangetastet. maximum était ensuite chez 7905x7905. |
| | | WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 06.06.2020 ▲ |
| |
| | Michael W. | alors une 64k-frontière?
j'ai cela Bild la fois geladen et getestet. on voit qui Kapverdischen Inseln et Gibraltar. qui reste vom gigantischen Bild ist pas trop voyons. mais abstürzen veux cela Programme pas. peux es son, cela son simple seulement trop wenig grenier im calculateur avez?
8460x8900 je peux mir eigentlich pas présenter que voici qui Bildschirmgröße une rôle écoutes. mon Samsung Bildschirm schafft 1920x1080 dans qui jetzigen Einstellung. |
| | | System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 10.06.2020 ▲ |
| |
|
Zum QuelltextOptions du sujet | 9.436 Views |
Themeninformationencet Thema hat 4 participant: |