Nu har jeg aldrig selv arbejdet med Builderen... men i de visuelle programmeringssprog jeg har leget med, har man kunne sætte et vindues baggrund til "Transparent" og derved kunne se det bagvedliggende (eks. desktoppen)... og jeg vil næsten tro at du også sagtens (på en eller anden måde) kan slå vindue/menu-baren fra (et eller andet med menu-bar visible = false ??)
En windows application har ALTID en form, hvis den skal skrive noget som helst på skærmen. Man kan ikke have f.eks. en TImage (som kunne bruges til at lave små animerede mænd) uden også at have en TForm. Det er TImage man kan gøre Transparent - men det er i forhold til den form som TImage bliver vist på.
Løsningen er derfor at nappe et bitmap snapshort af skrivebordet når din applikation startes op, og simpelthen vise den på din form - som så selvfølge hverken skal have border, minimize/maximize ikoner osv. og have typen wsMaximized. Hermed kan du lave din TImage component transparent og lave dine animationer der. Det vil så for brugeren se ud som om at det kun er animationen der kører.
De programmer du tænker på er (sjove scrensavers) skrevet uden om forms osv. om tegner direkte i skærmhukommelsen. Jeg fandt selv noget om teknikken ved at søge i alta-vista på screensavers, men hvor det var husker jeg ikke mere.
Ok jeg var vist lidt for hurtig...... Jeg ser nu at det ikke kan lade sig gøre at gøre et window transparent i builder. Og spørgsmålet var jo møntet på denne compiler.......
Derfor venter jeg med at give point til jeg får noget jeg kan bruge..
Ok... jeg tror i øvrigt du får MEGET svært ved at lave noget i Builder, hvor du kan "bruge" desktoppen "igennem" dine applikation... så er vi nemlig derovre hvor du bliver nødt til at skrive direkte til grafikkortet/skærmen...og gå helt uden om Windoze!
Det er et par dage siden jeg har programmeret så low level på windows, så jeg kan ikke huske alle detaljerne. Men grundlæggende, så har windows API kald til at lave grafik. Når du bruger disse kald, skal du bruge en handle for at angive hvilket vindue der skal skrives i. Og skrivebordet, har også en sådan handle. Så næste skridt for dig er at læse windows API igennem i help systemet.
flarup >> Lyder fornuftigt - men hvor får vi handlen fra. (Hvis dette er måden, vil det også kunne lade sig gøre i C++ Builder - men så kan du ikke benytte de standard komponenter der er i VCL'en.)
Jeps og derfra skal du have fat i Canvas´en til dektop gennem dets handle. Og Vås alle Win app.s behøver ikke at have en form !Alt i windows er sådan set et vindue, knapper menuer olign. Det er default at der er den meget bekendte ramme rundtom med overbjælke og luk/minimer og max knapper, men det kan man selv sætte op når man laver sin vindueklasse i windows. Derefter registreres klassen og man kan begynde at kreere vinduer med egenskaber fra sin klasse. Derfor: Lav din custom vindue klasse hvor du fjerner alt unødigt. Derefter laver du en canvas (tegneoverflade) til dit vindue der har den størrelse og position du selv har angivet (og ikke indeholder andet end ingenting), og begynder at tegne alle dine flotte tegninger på den. Som projekt skal du vælge console wiz, og derefter vælge win32 GUI APP. Så ruller du ! Thue
thue >> vi venter alle spændt på at du \"lige\" brygger et kort eksempel. At skulle begynde at registrere nye windows typer i Windows registry\'en lyder for mig som lidt overkill - der må da være en anden måde. Hvad men Screen->Desktop variablen ??? Giver den os ikke også en handle og dermed et canvas vi kan tegne på ???
Først lige en ting. At define sin vindues klasse har ikke noget med registry at gøre. I et almindeligt windows prg som man laver fra grunden SKAL man lave sin egen vindues klasse, registrere den og derefter lave et par vinduer som så arver de egenskaber man har angivet til sin klasse. Mange kører med default værdier til initialisering af klassen, men det behøver man ikke. Det er muligt at skaffe sig af med alle de \'almindelige\' features som et default vindue har, ved at specificere sin klasse anderledes. ------------------------------------------ jo du kan få fat i desktop canvas via det returnerede handle fra ovenstående funktion. canvas for desktop fylder hele desktop, hvilket jo egentlig ikke er et prob da du bare skal tegne det rigtige sted.
Det der taler for at have sin egen app. med sit eget vindue der ikke består af andet end en canvas (ganske ligesom desktop som jo også er et vindue), er at man får meget mere kontrol. Da det ikke er dig der har lavet desktop ved du heller hvordan den fungerer indeni, og du kan ikke lige erstatte de almindelige højremenuer i desktop med din egen højrekliksmenu som du jo kan hvis du selv har lavet din egen App.
Nej fordi du bruger Builder med vcl. Det gør jeg også, men mange gange kan det betale sig at lave sit Win prg fra grunden og det gør man som ovenstående. Prøv at lave en console app med Win32 GUI som projekt i din builder. Registreringen til operativsystemet er et enkelt funktionskald der fortæller windows om min vinduesklasse. Det er ikke mystisk og det har ikke noget med registry at gøre. Builderen gør det samme med de prg du laver men det ser du ikke, ligesom der er mange andre ting man ikke har fuld kontrol over i builderen, som ellers er et kanonfedt miljø.
tuxen >> Nåhhh, så er jeg med. Betyder det at ved at lave Win32 GUI console app, så har vi i C++ Builder faktisk \"samme\" miljø/muligheden som i MVC ???
oh yeah :-) Så kan du lave alt fra grunden af. 1. byg klasse. 2. registrer den til OS. 3. Lav et par vinduer. 4. Lav en eventhandler. 5. Hop i mainloop og reager på events. 6. Smid stængerne op på bordet og snup en skraver i sofaen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.