Gå til innhold

Hvordan få ett program til å dekke hele skjermen?


Anbefalte innlegg

Videoannonse
Annonse

Ok, har tenkt litt mer over det andre spørsmålet der, klødd meg litt i hodet og sett etter i gamle programmer jeg har laget og lignende, og nå mener jeg jeg husker hva det var for noe. Først av alt må du sette en del konstanter for å gjøre det litt enklere:

 

const
 NIF_INFO = $10;
 NIF_MESSAGE = 1;
 NIF_ICON = 2;
 NOTIFYICON_VERSION = 3;
 NIF_TIP = 4;
 NIM_SETVERSION = $00000004;
 NIM_SETFOCUS = $00000003;
 NIIF_INFO = $00000001;
 NIIF_WARNING = $00000002;
 NIIF_ERROR = $00000003;

 NIN_BALLOONSHOW = WM_USER + 2;
 NIN_BALLOONHIDE = WM_USER + 3;
 NIN_BALLOONTIMEOUT = WM_USER + 4;
 NIN_BALLOONUSERCLICK = WM_USER + 5;
 NIN_SELECT = WM_USER + 0;
 NINF_KEY = $1;
 NIN_KEYSELECT = NIN_SELECT or NINF_KEY;

 TRAY_CALLBACK = WM_USER + $7258;

 

Så er det noen typer som må defineres:

 

type
 PNewNotifyIconData = ^TNewNotifyIconData;
 TDUMMYUNIONNAME = record
   case integer of
     0: (uTimeout: UINT);
     1: (uVersion: UINT);
 end;

 TNewNotifyIconData = record
   cbSize: DWORD;
   Wnd: HWND;
   uID: UINT;
   uFlags: UINT;
   uCallbackMessage: UINT;
   hIcon: HICON;
   szTip: array [0..127] of char;
   dwState: DWORD;
   dwStateMask: DWORD;
   szInfo: array [0..255] of char;
   DUMMYUNIONNAME: TDUMMYUNIONNAME;
   szInfoTitle: array [0..63] of char;
   dwInfoFlags: DWORD;
 end;

 

Du vil trenge et par prosedyrer i klassen som inneholder formen:

 

procedure SysTrayIconMsgHandler(var Msg: TMessage); message TRAY_CALLBACK;
procedure AddSysTrayIcon;
procedure DeleteSysTrayIcon;

 

Deretter, under public-direktivet i klassen som hører til formen, legger du inn denne linjen:

 

IconData: TNewNotifyIconData;

 

Så må du legge inn prosedyrene vi definerte tidligere:

 

procedure TMain.SysTrayIconMsgHandler(var Msg: TMessage);
begin
 case Msg.LParam of
   WM_LBUTTONUP: { noe som skjer når brukeren klikker på tray-ikonet };
 end;
end;

procedure TMain.AddSysTrayIcon;
begin
 IconData.cbSize: = SizeOf(IconData);
 IconData.Wnd: =  AllocateHWnd(SysTrayIconMsgHandler);
 IconData.uID: = 0;
 IconData.uFlags: = NIF_ICON or NIF_MESSAGE or NIF_TIP;
 IconData.uCallbackMessage: = TRAY_CALLBACK;
 IconData.hIcon: = Application.Icon.Handle;
 IconData.szTip: = 'Navnet på programmet ditt';
 if not Shell_NotifyIcon(NIM_ADD, @IconData) then ShowMessage('Feilmelding som sier at tray-ikonet ikke kunne opprettes');
end;

procedure TMain.DeleteSysTrayIcon;
begin
 DeallocateHWnd(IconData.Wnd);
 if not Shell_NotifyIcon(NIM_DELETE, @IconData) then
   ShowMessage('Feilmelding som sier at tray-ikonet ikke kunne fjernes');
end;

 

Nå gjenstår det bare to små ting - når du vil at ikonet skal legges til tray'et, kjører du denne linjen her:

 

AddSysTrayIcon;

 

... og når ikonet skal fjernes igjen, bruker du denne linjen:

 

DeleteSysTrayIcon;

 

Går ut ifra at du vet hvordan du skjuler/viser en form, så nå har du vel det du trenger å vite ;)

Lenke til kommentar

Ved å sette maximized til true vil ikke programmet dekke taskbaren eller andre eventuelle toolbars docket til kantene.

 

De aller fleste fullskjermsspill benytter seg nok av DirectX i fullskjermmodus. Hvordan du ellers skal få det til å dekke taskbaren vet jeg ikke.

 

-Vegar

Lenke til kommentar

hm.. Ja, så sannelig! Det var ukjent for meg.

 

Ser ut til at en form med borderstyle = bsNone blir opprettet som et WS_POPUP-vindu, og popup-vinduer bryr seg ikke om at taskbaren er satt til always on top.

 

Lærer stadig noe nytt....

 

-Vegar

Lenke til kommentar

Er litt ny på delphi, hvor skal jeg skrive inn const og type?

 

Og på det med tray ikonet så får jeg en rekke feil mld..Antar vell at jeg skal legge AddSysTrayIcon; og DeleteSysTrayIcon; på en button elns?

 

Og det med procedure og de procedure tingene så får jeg en rekke feil mld, det er blant annet: procedure TForm1.DeleteSysTrayIcon; Feil mld på den.

IconData.cbSize: = SizeOf(IconData); på den, +noen til..

Og en lite ting som har skjedd av seg selv som plager meg, når jeg holder på dær jeg skriver koder så funker det ikke å markere ting og slette det/begynne å skrive så at det kommet bort, men jeg må begynne bakerts og ta bokstav for bokstav med backapse..:S Noen som vet hvor jeg fikser det?

Takk..

 

Btw: Er det noe jeg må legge til i uses?

 

EDIT: Her er koden:

 

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons;

type
 TForm1 = class(TForm)
   BitBtn1: TBitBtn;
   BitBtn2: TBitBtn;
   procedure BitBtn2Click(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
   procedure SysTrayIconMsgHandler(var Msg: TMessage); message TRAY_CALLBACK;
procedure AddSysTrayIcon;
procedure DeleteSysTrayIcon;
 private
   { Private declarations }
 public
 IconData: TNewNotifyIconData;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
AddSysTrayIcon;
end;

procedure TMain.SysTrayIconMsgHandler(var Msg: TMessage);
begin
case Msg.LParam of
  WM_LBUTTONUP: { noe som skjer når brukeren klikker på tray-ikonet };
end;
end;

procedure TForm1.AddSysTrayIcon;
begin
IconData.cbSize: = SizeOf(IconData);
IconData.Wnd: =  AllocateHWnd(SysTrayIconMsgHandler);
IconData.uID: = 0;
IconData.uFlags: = NIF_ICON or NIF_MESSAGE or NIF_TIP;
IconData.uCallbackMessage: = TRAY_CALLBACK;
IconData.hIcon: = Application.Icon.Handle;
IconData.szTip: = 'Navnet på programmet ditt';
if not Shell_NotifyIcon(NIM_ADD, @IconData) then ShowMessage('Feilmelding som sier at tray-ikonet ikke kunne opprettes');
end;

procedure TForm1.DeleteSysTrayIcon;
begin
DeallocateHWnd(IconData.Wnd);
if not Shell_NotifyIcon(NIM_DELETE, @IconData) then
  ShowMessage('Feilmelding som sier at tray-ikonet ikke kunne fjernes');
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
DeleteSysTrayIcon;
end;

end.

 

 

Og med det samme jeg er igang så har jeg noen spørsmål til:

 

Jeg har lært at hvis det er noe jeg skal ha passord "beskyttet" så bruker jeg den enkel her:

 

 

IF Edit1.text = '123456' then showmessage ('Riktig!');
IF Edit1.text > '123456' then showmessage ('Feil');

 

Og at hvis det er en tekst jeg vil lagre i en text fil så gjør jeg slik:

var
FileName: String;
begin               
 FileName := '1.TXT';	
 with Memo1.Lines do
 begin
   SaveToFile(FileName);
end;

 

Og for å hente tekst fra en txt fil så:

var
 FileName: string;	
begin              
 FileName := '1.TXT';	
 with Memo1.Lines do
 begin
   LoadFromFile(FileName);

 

Men så lurte jeg på hva jeg skulle gjøre for at koden som ble skrevet inn i feks edit1 er teksten som står i txt fila?

 

Har prøvd mange ting men enda ikke funnet noe som virker..

Og er det noen som vet en måte jeg kan gjøre til at den txt fila hvor "passordet" ligger kan bli kryptert? evt. at jeg lager det slikt at når noen vil bytte passord så lager programmet automatisk er kryptert test som den ligger i tekst filen og som den igjenn dekrypterer automatisk når noen prøver å skrive inn passordet hvis dere skjønner hva jeg mener? Elr hvis dere har noen andre gode forslag til hvordan jeg kan gjøre alt dette med passord? Takk..

 

Edit: Hehe..Når jeg så på innlegget selv nå så var det mye tull her gitt..men det gidder jeg ikke å gjøre noe med nå:p Natta!

Endret av oblomsoe
Lenke til kommentar

Gå inn på SubSimple og last ned CoolTray Icon. Om du ikke vil bruke komponenten så ser du ivertfall hvordan man lager trayicon.

 

Når det gjelder kryptering og koder så kan du gå til sourceforge.net og ta en titt på LockBox og OnGuard (bare søk etter de) så tror jeg du finner det du er ute etter.

Lenke til kommentar

Hm, jeg finner de programmene på sourceforge.net, men det er ingen projects realesed?

Og er det en måte å gjøre til att ett program ikke vil lukke seg ved å trykke alt+F4? Slik at eneste måten å lukke det på er å trykke på en button som har kommandoen close;..?

Og noen som vet hvordan jeg skal få til at det som blir skrevet inn i en edit boks skal sammenlignes med det i en txt fil? Slikt som jeg beskrev med en memo i en annen post..Og hvordan får jeg til å lagre innstillinger som brukerne har lagt til? Som feks bakrunsfarge osv? Fins det en mulighet for å rewrite scriptet mens noen bruker programmet elns?

 

Takk

Endret av oblomsoe
Lenke til kommentar

Her har du en kode som gjør det meste du spør om, hvis du vil kryptere så kan du bruke TurboPower LockBox.

 

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, AppEvnts, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Button2: TButton;
   Label1: TLabel;
   Edit2: TEdit;
   Button3: TButton;
   procedure Button3Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   procedure wmSyscommand( var msg: TWMSyscommand ); message WM_SYSCOMMAND;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.wmSyscommand(var msg: TWMSyscommand);
begin
 if (msg.CmdType and $FFF0) = SC_CLOSE then 
   exit
 else
   inherited;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 close;
end;


procedure TForm1.Button2Click(Sender: TObject);

var
 Stream:TFileStream;
 str:string;

begin
 str := '';
 Stream := TfileStream.Create('Test.txt',fmOpenRead);
 stream.Position := 0;
 SetLength(str,length(edit1.text));
 try
   Stream.ReadBuffer(pointer(str)^,length(edit1.text));
 except
 end;
 if str = edit1.text then
   showmessage('Riktig Passord')
 else
   showmessage('Feil Passord');
 Stream.free;
end;


procedure TForm1.Button3Click(Sender: TObject);

var
 Stream:TFileStream;
 str:string;

begin
 Stream := TFileStream.Create('Test.txt',fmCreate);
 Stream.WriteBuffer(Pointer(Edit2.Text)^, Length(Edit2.Text));
 Stream.Free;
end;

end.

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å
×
×
  • Opprett ny...