Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: Ohjelma pyörii, kaikki muu pysähtyy

NanoSoft [31.03.2006 15:03:18]

#

Tein analogisen kello-näytönsäästäjän/ohjelman, mutta kun se on päällä ja koitan klikata tai tehdä jotakin muuta niin ei onnistu ennenkuin sammutan sen... Onko tämä yleistä delphi ohjelmissa ja jos on niin miten sen saisi toimimaan normaalisti; niin, että voisi tehdä muutakin samalla kun se näyttää aikaa oikealla alakulmassa?
Lataa
pysähtyy lyömällä näppistä nyrkillä ;)

D4_B34M [31.03.2006 16:02:49]

#

Eihän näytönsäästäjän ajamisen aikana voi koskaan tehdä mitään muuta.

Metabolix [01.04.2006 09:11:46]

#

Eli toisin sanoen, jos ohjelman pitää taustalla toimia, tee siitä ohjelma äläkä näytönsäästäjää.

NanoSoft [02.04.2006 19:19:06]

#

no on mulla ohjelmakin siitä, mut ei se silti toimi
Lataa ohjelma

Metabolix [02.04.2006 20:04:21]

#

Eihän tuo ole edes läpinäkyvä. Olet jättänyt aluksi värin määrittelemättä, jolloin koko ikkuna värjäytyy sillä, mitä ruudulla sattuu aluksi olemaan. Kokeile vaikka laittaa jokin animaatio pyörimään, niin huomaat, kuinka se "pysähtyy", kun ohjelmasi käynnistyy.

Ratkaisu tulee layereiden kautta, mutta niitä ei vanhemmista Windowseista kuitenkaan löydy.

procedure Lapinakyva_Vari(Handle: HWND; Vari: COLORREF; KokoAlpha: Byte);
var
  ExStyle: Integer;
begin
  { Tasot päälle }
  ExStyle := GetWindowLong(Handle, GWL_EXSTYLE);
  if (ExStyle and WS_EX_LAYERED) = 0 then
    SetWindowLong(Handle, GWL_EXSTYLE, ExStyle or WS_EX_LAYERED);

  { Väri ja alpha käyttöön }
  SetLayeredWindowAttributes(Handle, Vari, KokoAlpha, LWA_COLORKEY or LWA_ALPHA);
end;

Vain yksi väri voi olla kerrallaan läpinäkyvä. Maalaat siis koko ikkunan kelloa lukuun ottamatta yhdellä värillä. Alpha puolestaan vaikuttaa koko ikkunaan, joten ei kannata laittaa sitä nollaksi :)

(Äläkä tule valittamaan, että tuo on Pascalia. :)

Se toinen tapa on sitten piirrellä haluamansa suoraan ruudulle ilman mitään ikkunoita, eli näin:

HDC hDC = GetDC(0);
// Piirtoa hDC:lle tässä välissä
SetPixel(hDC, 100, 100, (rand() << 15) | rand());
ReleaseDC(0, hDC);

Blaze [03.04.2006 00:02:44]

#

Metabolix kirjoitti:

(Äläkä tule valittamaan, että tuo on Pascalia. :)

Ja nyt ei voi enää valittaa edes siitä. VB-versio: https://www.ohjelmointiputka.net/koodivinkit/24435-vb6-aktiivisen-ikkunan-päällä-istuva-maskotti

Edit: No niin. Liian myöhään ylhäällä. Ei tämä ole Basic-alue >_<

NanoSoft [03.04.2006 15:10:25]

#

kiitti, kokeilen heti kun jaksan...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta