Gå til innhold

Kan noen prøve ut en kode i Delphi?


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...