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ä ;)
Eihän näytönsäästäjän ajamisen aikana voi koskaan tehdä mitään muuta.
Eli toisin sanoen, jos ohjelman pitää taustalla toimia, tee siitä ohjelma äläkä näytönsäästäjää.
no on mulla ohjelmakin siitä, mut ei se silti toimi
Lataa ohjelma
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);
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/
Edit: No niin. Liian myöhään ylhäällä. Ei tämä ole Basic-alue >_<
kiitti, kokeilen heti kun jaksan...
Aihe on jo aika vanha, joten et voi enää vastata siihen.