[delphi] Hoe kun je de username gebruiken?

Pagina: 1
Acties:

  • banaan-X
  • Registratie: Februari 2001
  • Niet online
Is er een functie die de username van de huidige ingelogte gebruiker teruggeeft. Ik kreeg dit gemaild: "if you use the Windows API function GetUserName() you will get the name
of the logged in user". Maar als ik dan dit doe:
code:
1
2
3
4
5
procedure TForm1.FormCreate(Sender: TObject);
begin
  Label2.Caption :=
  GetUserName();
end;

geeft ie deze error:

[Error] Unit1.pas(37): Not enough actual parameters
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Hoe moet het wel?

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 21:22
gebruiker:=GetCurrentUserName;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function TForm1.GetCurrentUserName : string;
const
  cnMaxUserNameLen = 254;
var
  sUserName     : string;
  dwUserNameLen : DWord;
begin
try
  dwUserNameLen := cnMaxUserNameLen-1;
  SetLength( sUserName, cnMaxUserNameLen );
  GetUserName(
    PChar( sUserName ),
    dwUserNameLen );
  SetLength( sUserName, dwUserNameLen );
  if sUserName[length(sUsername)]=#0 then sUserName:=copy(sUserName,1,length(sUserName)-1);
  Result := sUserName;
 except
  on e: Exception do
  begin
   Afsluiten;
   MessageBox(Application.Handle, pchar(E.message),'Fout!',MB_ICONEXCLAMATION);
  end;
 end;
end;

-edit- stukje code vergeten :)

btw, druk eens een keer op f1, dan krijg je help over het onderwerp ;)

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

meer informatie over getUsername in de MSDN-Library

Localhost, sweet localhost


  • banaan-X
  • Registratie: Februari 2001
  • Niet online
Op maandag 10 september 2001 22:31 schreef Jelmer Barhorst het volgende:
gebruiker:=GetCurrentUserName;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function TForm1.GetCurrentUserName : string;
const
  cnMaxUserNameLen = 254;
var
  sUserName     : string;
  dwUserNameLen : DWord;
begin
try
  dwUserNameLen := cnMaxUserNameLen-1;
  SetLength( sUserName, cnMaxUserNameLen );
  GetUserName(
    PChar( sUserName ),
    dwUserNameLen );
  SetLength( sUserName, dwUserNameLen );
  if sUserName[length(sUsername)]=#0 then sUserName:=copy(sUserName,1,length(sUserName)-1);
  Result := sUserName;
 except
  on e: Exception do
  begin
   Afsluiten;
   MessageBox(Application.Handle, pchar(E.message),'Fout!',MB_ICONEXCLAMATION);
  end;
 end;
end;

-edit- stukje code vergeten :)

btw, druk eens een keer op f1, dan krijg je help over het onderwerp ;)
Tnx, maar hoe moet ik deze funtie nu nog onder type eerst vermelden? Zo werkt het niet:
code:
1
2
3
4
5
6
7
8
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    function TForm1.GetCurrentUserName : string;

Verwijderd

:) werkt dat niet?

probeer:
code:
1
2
3
4
5
6
7
8
9
10
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  public
    procedure InDezeProcedureGaIkDeAPIGetCurrentUserAanRoepen; 
  end;

zet de cursor op de procedure InDeze... en druk op [CTRL]+[SHIFT]+[C] en denk dan effe verder...

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 21:22
In de class-definitie hoef je de naam van de class niet voor de functie te specificeren.
Dus

[code]
type TForm1=class(TForm)
.
.
function GetCurrentUsername():String;
.
.
end;
[code]

  • banaan-X
  • Registratie: Februari 2001
  • Niet online
Op maandag 10 september 2001 23:07 schreef DiFool het volgende:
:) werkt dat niet?

probeer:
code:
1
2
3
4
5
6
7
8
9
10
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  public
    procedure InDezeProcedureGaIkDeAPIGetCurrentUserAanRoepen; 
  end;

zet de cursor op de procedure InDeze... en druk op [CTRL]+[SHIFT]+[C] en denk dan effe verder...
crtl + shift + c doet helemaal niets...
Kan iemand het misschien wat uitgebreider uitleggen? Ik snap er niets van...

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

De algemene syntax voor procedures van klassen is hieronder weergegeven. IN de class worden ze gedeclareerd zonder de classnaam ervoor, in de implementation worden ze gedeclareerd MET de classnaam ervoor.
[ctrl]+[shift]+[c] werkt alleen als je unit vrijwel foutloos is, en de declaratie nog niet voorkomt (duh...). Bovendien moet de cursor in de declaratie van de klasse staan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Unit Blaaat;

uses windows, [...];
type
  TForm1 = class(TForm)
    Button1:TButton;
    [...]
  private
    procedure blaat(input:Integer);
    [...]
  end;

implementation

[...]

Procedure TForm1.blaat
begin
  // doe niets en geniet van de rust...
end;

end.

Localhost, sweet localhost


Verwijderd

Weet iemand trouwens een goede site waar duidelijke informatie staat over het gebruik van WinAPI enzo??

Verwijderd

msdn.microsoft.com
Pagina: 1