SimenAndre Skrevet 21. juli 2003 Del Skrevet 21. juli 2003 Jeg er nesten ferdig med ett spill, og lurer på om jeg skal ta med en noe som gjør at når spillet skifter skjerm så fader den imellom dem. Jeg er nesten helt sikker på at dette ikke funker i windows 98, men er ikke helt sikker. Jeg har selv windows 2000. Trenger folk med Windows 98 både 1st and 2nd edition, Windows XP, Windows ME til å prøve ut koden. Koden er bare for å teste ut det fade greine. Hvis dere ikke har Delphi så kan jeg sende en .exe fil. Fint om dere hadde giddet. For at det skal funke så skal den første formen bli gradvis borte og når den er borte kommer en ny opp. Alt dere trenger å gjøre når dere limer inn formen inn i koden er å lage en knapp (TButton) og lage en form til slik at det er to former. interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TSetLayeredWindowAttributes = function ( hwnd : HWND; crKey : TColor; bAlpha : byte; dwFlags : DWORD ): BOOL; stdcall; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; const WS_EX_LAYERED = $80000; LWA_COLORKEY = 1; LWA_ALPHA = 2; implementation uses Unit2; {$R *.DFM} procedure SetTransparentForm(AHandle : THandle; AValue : byte = 0); var Info: TOSVersionInfo; SetLayeredWindowAttributes: TSetLayeredWindowAttributes; begin Info.dwOSVersionInfoSize := SizeOf(Info); GetVersionEx(Info); if (Info.dwPlatformId = VER_PLATFORM_WIN32_NT) and (Info.dwMajorVersion >= 5) then begin SetLayeredWindowAttributes := GetProcAddress(GetModulehandle(user32), 'SetLayeredWindowAttributes'); if Assigned(SetLayeredWindowAttributes) then begin SetWindowLong(AHandle, GWL_EXSTYLE, GetWindowLong(AHandle, GWL_EXSTYLE) or WS_EX_LAYERED); SetLayeredWindowAttributes(AHandle, 0, AValue, LWA_ALPHA); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin SetTransparentForm(Handle, 255); end; procedure TForm1.Button1Click(Sender: TObject); var I : integer; begin for i := 255 downto 0 do begin SetTransparentForm(Handle,i); Application.ProcessMessages; if i = 0 then begin Form2.Visible := True; Form1.Visible := False; end; end; end; end. Lenke til kommentar
Superchez Skrevet 21. juli 2003 Del Skrevet 21. juli 2003 Hvis du skal teste at dine programmer funker på de fleste operativsystemene, anbefaler jeg at du legger inn vmware (www.vmware.com), der du legger inn de meste brukte operativsysteme, slik at du når som helst kan sjekke om de er kompatible med programmet ditt (hvis du trenger andre til å teste ofte, er det en løsning i hvert fall). Jeg beklager, men bruker Windows 2000 selv. Lenke til kommentar
konsept1 Skrevet 22. juli 2003 Del Skrevet 22. juli 2003 hos meg står det bare "project projeckt1.exe raised exeption class Eclass not found whit message 'class tbutton not found '. process stopped. use step or run to continue kjører xp home edition Er det noe jeg gjør feil. Lenke til kommentar
SimenAndre Skrevet 22. juli 2003 Forfatter Del Skrevet 22. juli 2003 konsept: som jeg sa måtte du legge til en knapp før du kjørte programet Lenke til kommentar
SimenAndre Skrevet 22. juli 2003 Forfatter Del Skrevet 22. juli 2003 Jeg trenger ikke å sjekke det ofte, jeg trenger nå bare 1 person som har windows 98, en som har windows XP og en som har Windows ME til å kjøre programmet. Hadde vært fint om noen gadd, for det er litt viktig med tanke på spillet jeg lager. Lenke til kommentar
kilogram Skrevet 22. juli 2003 Del Skrevet 22. juli 2003 Det der virkar ikkje på Windowsversjonar tidligare enn 2000 (og det inkluderer ME). Transparente formar vart først støtta frå og med W2K. Lenke til kommentar
SimenAndre Skrevet 23. juli 2003 Forfatter Del Skrevet 23. juli 2003 Det er det jeg også hadde en viss anelse om. Men det som jeg egentlig lurte på var om spillet gikk videre selv om den ikke støttet transparerte former, eller om den stoppet eller noe slags error o.s.v. Lenke til kommentar
john_h Skrevet 28. juli 2003 Del Skrevet 28. juli 2003 Det burde ikke bli en feil, og 98/ME burde bare gå videre, siden du har med en if som skal luke ut de som har 98/ME: if (Info.dwPlatformId = VER_PLATFORM_WIN32_NT) and (Info.dwMajorVersion >= 5) then På 98/ME så er dwMajorVersion noe med 4 (og dwPlatformId har ikke NT i seg skulle jeg tro).. Jeg har XP selv så jeg kan ikke bekrefte det 100%. -John Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå