Blinkning då vb.net öppnar en form med bakgrundbild...

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av sodjan »

Hej.
Jag vet att det finns många duktiga programmerare här så jag tänkte
fråga här efter två dagars googlande och testande... :-)

Sitter och hjälper grabben med ett vb.net projekt. Ett "vanligt" Windows program.

Vi använder: Visual Studio Express 2013 for Windows Desktop

En form har en bakgrundsbild (inlagd vid design) och sedan ett 20 tal
buttons och text labels. Problemet är att när Windows visar/öppnar formen
så görs det först "hål" i bakgrundsbilden där de olika buttons och labels ska vara.
Dessa "hål" får samma färg som den bakgrund som fanns där innan, antingen
t.ex färgen från skrivbordet eller t.ex text från en websida, om formen öppnades
"framför" en websidan. Det går rellativ fort innan rätt knappar och labels fylls i,
men det hela "blinkar" ganska störande.

Man kan notera att det på min maskin (Win7) så är det föregående bakgrund
som syns genom "hålen". På grabbens Win8.1 maskin så verkar det alltid
bli helt vita rutor, så det är inte helt konsekvent...


Efter googling har vi provat olika "lösningar" som t.ex.
- DoupleBuffering = True (även satt direkt i properties istället för i Load() event.
- SuspendLayout/ResumeLayout

Alla dessa i Load() event, men problemet verkar uppträda innan man kommer
så långt, inget av ovanstående gjorde i alla fall någon skillnad.

Det vore bättre (mindre störande) om Windows inte reserverar (gör hål)
i bakgrundsbilden för de objekt som ska skrivas dit, men just det har jag
inte hittat något sätt att undvika (ställa in).

En sak som vi inte har testat är att sätta alla objekt till visible=False vid
design och sedan ändra till True efter att formen är laddad...

Projektet är skapat som en "Windows Forms". Det finns även "WPF"
som ett alternativ, inget som vi har provat eller testat...

Man kan även notera att man får samma fenomen om man bara minimerar
och sedan återställer fönstret, det verkar alltså ha med hur Windows "ritar",
inte med vb.net som sådant (?).

Hur som helst, om någon som har sett detta fenomen (och hittat en lösning)
så är jag väldigt intresserad... :-)

/Janne.
Användarvisningsbild
lgrfbs
Inlägg: 7298
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av lgrfbs »

"Man kan även notera att man får samma fenomen om man bara minimerar
och sedan återställer fönstret, det verkar alltså ha med hur Windows "ritar",
inte med vb.net som sådant (?)."

Jepp det hänger ihop med drivrutinen för att rita upp objekt på Windows cavans, typ.
Jag hade provat med att lägga "refresh" direkt i onShow eventet vilket gör att det objektet måste ritas om direkt.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av sodjan »

OK.
Ja, känslan är att det inte finns något att göra i själva vb.net koden åt problemet.

Om man helt tar bort bakgrundsbilden som täcker hela formen, så fungerar allt
mycket bättre, även ifyllnaden av alla buttons och labels går då "direkt"...

Jag lyckades trycka "Print screen" medan effekten syns, se nedan. Någon
halvsekund senare är värderna ifyllda, se andra bilden. Jag positionerade
formen så att bakgrunden skulle kännas igen... :-)

Det vore som sagt helt acceptabelt om rutorna inte "reserverades" utan
bara skrevs över när objektet sedan ritas. Att det tar någon halvsekund
gör ingenting, det är "blinkningen" som stör...
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av Micke_s »

Man kan ju skapa knapparna/fälten när onload kör för formuläret. Eventuellt så räcker det med att köra "hidden" på knapparna "default" och visa dessa vid onload...
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av sodjan »

Ja, vi har diskuterat det och kanske tar och provar.
Men fenomenet dyker ju även upp när form'en ligger "vilande" på
skärmen medan och man t.ex kollar något i browsern. När browsern
stängs ner så får man samma fenomen utan att den aktuella form'en
har varit "nere" eller "stängd", den har bara varit i bakgrunden ett tag.
opatagio
Inlägg: 236
Blev medlem: 24 maj 2005, 20:19:21

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av opatagio »

Är inte så att det är "tunga" bilder? Testa en bild i samma pixelstorlek med enbart en färg, grå eller blå, och se om det blir samma fenomen?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av sodjan »

När det gäller bakgrundsbilden så gjorde vi en med lägre färgdjup
och även en enfärgad. Samma fenomen. Vi har inte provat med
annat filformat än JPG, i och för sig. Kanske ett enklare okomprimerat
format (GIF?) är "snabbare".

Håller på och installerar Express 2013 for Windows Desktop för
att köra lite egna tester...
Användarvisningsbild
lgrfbs
Inlägg: 7298
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av lgrfbs »

Prova *.BMP det är det som brukar vara vanligast när det är bakgrunder och ikoner inom program. Det är i alla fall vad jag har upplevt.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av sodjan »

Ja, vi får nog testa det också.
Har just fått igång det hela på min laptop och försöker
göra ett testprogram (med WPF) så får vi se... :-)
Användarvisningsbild
tecno
Inlägg: 27248
Blev medlem: 6 september 2004, 17:34:45
Skype: tecnobs
Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
Kontakt:

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av tecno »

Testat med .png?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av sodjan »

:-) Nej, vi har enbart kört med JPG, so far... :-)
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av Andax »

Nu har jag inte kört vb men har för mig att man kan override någon erase metod och låta den inte göra något. Troligtvis kräver dina knappar i då fall denna basklass med den överridna metoden.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Blinkning då vb.net öppnar en form med bakgrundbild...

Inlägg av sodjan »

Update...
Har nu gjort samma test app (en enkel form med bakgrundsbild med 60-70 "buttons")
byggt både med "Forms" och "WPF". Det är mycket bättre prestanda WPF lösningen.

Samtidigt hittade grabben en lösning i "Forms" som med en kombination av
hide, show och speciellt DoEvents på rätt ställe, gjorde att bytet av bild
fördröjdes tills alla objekt var renderade. Inget blink, som det ser ut.

Samtidigt så är väl WPF "framtiden", så att säga...
Skriv svar