SkinWindow (optimierte Methode)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

SkinWindow (optimierte Methode)

Beitrag von Mischa »

Hab' mich heute Nacht mal (wieder) mit den WindowSkins
beschäftigt,weil ich eventuell gDesign auch damit ausstatten will.

Das Problem ist immer die Geschwindigkeit gewesen.
(bei größeren Fenstern) Daher hatte ich damals den SkinGenerator gemacht
und Danilo (aus den gleichen Gründen nehme ich an) die
SkinWinFast lib. In beiden Fällen müssen dafür aber die Maskendaten
gespeichert werden, sind also schon vorberechnet.

Mit dieser kleinen Mini-Lib (1,8 KB)

Download: http://www.thinkrelative.de/skin.zip

geht es auch in den meisten Fällen ohne, denke ich.

Wenn ich mich an SkinWin orientiere, und das muß ich, da ja die
meisten damit arbeiten werden, ist meine 'etwas andere' Routine
bis zu 8 mal schneller.

Testet doch bitte mal.

Gruß,
Mischa
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

Bild
Benutzeravatar
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag von Mischa »

@MLK??

Was ist das jetzt? Ein Schliereneffekt beim verschieben?
Wenn ich das Beispiel-Fenster etwas durch die Gegend schiebe
und schnell mal die Drucktaste drücke kriege ich auch so
ein schönes Bild. (Mit SkinWin übrigens auch /:-> )

Etwas genauer bitte? Ist das Fenster jetzt in Bewegung während der
Aufnahme, oder steht es still. Rekonstruiert JaPBe ordentlich seinen
eigenen Hintergrund?

Fehler, oder nicht? :?
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

das fenster war natürlich in bewegung als ich den screenshot machte. verhalten auf anderen hintergrundfenstern ähnlich.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hab zum testen mal das example erweitert:

Code: Alles auswählen

Enumeration 
  #SkinWindow
  #SkinWin
  #SkinWinFast
EndEnumeration

#FLAG = #SkinWindow ;

winflags=#PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible

CompilerSelect #FLAG
  CompilerCase #SkinWinFast
    image = LoadFastSkin("test.PBS")
    OpenWindow(0,0,0,FastSkinWidth(image),FastSkinHeight(image),winflags,"SkinWindow")
    SkinWinFast(WindowID(),Image)
  CompilerCase #SkinWin
    image=LoadImage(#PB_Any,"test.bmp")
    OpenWindow(0,0,0,ImageWidth(),ImageHeight(),winflags,"SkinWindow")
    SkinWin(WindowID(),ImageID())
  CompilerCase #SkinWindow
    image=LoadImage(#PB_Any,"test.bmp")
    OpenWindow(0,0,0,ImageWidth(),ImageHeight(),winflags,"SkinWindow")
    SkinWindow(WindowID(),ImageID())
CompilerEndSelect

HideWindow(0,0)
Repeat
  event=WaitWindowEvent()

  If event=#WM_LBUTTONDOWN 
    SendMessage_(WindowID(),#WM_NCLBUTTONDOWN, #HTCAPTION,0)
  EndIf
  
Until GetAsyncKeyState_(#VK_ESCAPE)

CompilerIf #FLAG = #SkinWindow
  FreeWindowSkin(WindowID())
CompilerEndIf
Mein Eindruck:
Mischas Lib ist wesentlich schneller als SkinWin und in etwa gleich mit
SkinWinFast. Wie man das messen könnte, ist mir nichts zu eingefallen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag von Mischa »

@MLK: Aha. Danke!

Das ist normal. Wie bereits erwähnt, ist das bei SkinWin nicht anders.
Abgesehen davon ist das Ding 1024 * 768 und hat sicherlich ein paar
Zacken und Lücken mehr als so ziemlich jedes sinnvoll geskinnte
Fenster jemals hätte.
Ist nur ein Beispiel, das die Kalkulation-Geschwindigkeit zeigen soll.
Schlieren-Effekte hat man ansonsten bei eingeschalteter Fensteranimation
aber bei so ziemlich jedem geskinnten Fenster.
(Mehr, oder weniger, je nach Größe und Form)

Gruß,
Mischa
Benutzeravatar
rayman1970
Beiträge: 89
Registriert: 01.09.2004 16:10
Wohnort: Troisdorf bei Bonn
Kontaktdaten:

Beitrag von rayman1970 »

Hi Mischa !

Dein optimiertes SkinWin ist echt super genial schnell !! Mein Kompliment !!!
Ich werde es selbstverständlich in meine Programme einbauen .
Mir ist aufgefallen das beim original SkinWin die transparente Farbe , ohne Eingabe der Koordinaten , in der linken , oberen Ecke definiert wird . Bei dir passiert das in der rechten , oberen Ecke . Ich hatte meinen alten SkinWin gegen deinen Neuen ausgetauscht und hatte dadurch zuerst Kompatibilitätsprobleme .
Aber alles in allem kann ich nur sagen : PERFEKT !!!

Gruss Rayman
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Wenn ihr gerne sehen wollt wie man sowas selbst machen kann...

http://www.purebasic-lounge.de/viewtopic.php?t=1657
Benutzeravatar
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag von Mischa »

@Hroudtwolf

Du meinst wie 'SetLayeredWindowAttributes_()' also Windows
das selbst macht, gell? :wink:

Und übrigens ist Windows erst ab 2000 erwachsen genug das selber
tun zu können. (Hättest Du evtl. dabei schreiben können?)

Mit 98/Me muß man das dann wirklich selber machen, oder aber
z.B. meine Lib verwenden.

Ansonsten, nettes Beispiel HW. :allright:

Gruß,
Mischa
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Danke.

Habs auch, wie dort geschrieben, nur unter XP getestet.

Wie genau funktioniert der Vorgang bei deiner Hausgemachten Methode ?
Antworten