Como deixar o quot;*quot; Para WinXP e as versões anterior

Delphi

09/08/2005

Pessoal, fiz um programa q o campo senha é exibido com ´*´ (asterisco), só q no winxp é um tipo de ´*´ (font: windings letra ´l´) e nas versões anteriores do winxp é outro...

gostaria de fazer com que esse programa quando execultado em winxp aparecesse o ´*´ do winxp e quando execultado nas versões anteriores do winxp aparecesse o ´*´ normal

Como fazer issu???


Duolon

Duolon

Curtidas 0

Respostas

Duolon

Duolon

09/08/2005

Ninguem???


GOSTEI 0
Sistemald

Sistemald

09/08/2005

Deve ter outra forma de fazer com que o ´*´ do Windows XP fique correto, sem qeu sejá necessário trocar a font


GOSTEI 0
Rjun

Rjun

09/08/2005

Dê uma olhada nesse tópico:

http://forum.clubedelphi.net/viewtopic.php?t=60337

Sabendo qual a versão do windows, você configura seu edit para mostar o ´*´ ou o caractere do XP.


GOSTEI 0
Duolon

Duolon

09/08/2005

Dê uma olhada nesse tópico: http://forum.clubedelphi.net/viewtopic.php?t=60337 Sabendo qual a versão do windows, você configura seu edit para mostar o ´*´ ou o caractere do XP.


Valew cara:

tipo eu ñ manjo quase nada de delphi como q fica esse código aparecendo os ´*´ nos respectivo windows? para meu caso axo q isso tem ser simplificado, pq são somente 2 tipos de ´*´, oq muda é o do windowsXP, o ´*´ dos outros windows são iguais...

const
  { operating system (OS)constants }
  cOsUnknown = -1;
  cOsWin95 = 0;
  cOsWin98 = 1;
  cOsWin98SE = 2;
  cOsWinME = 3;
  cOsWinNT = 4;
  cOsWin2000 = 5;
  cOsXP = 6;


function GetOperatingSystem: Integer;
var
  osVerInfo: TOSVersionInfo;
  majorVer, minorVer: Integer;
begin
  Result := cOsUnknown;
  { set operating system type flag }
  osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  if GetVersionEx(osVerInfo) then
  begin
    majorVer := osVerInfo.dwMajorVersion;
    minorVer := osVerInfo.dwMinorVersion;
    case osVerInfo.dwPlatformId of
      VER_PLATFORM_WIN32_NT: { Windows NT/2000 }
        begin
          if majorVer <= 4 then
            Result := cOsWinNT
          else if (majorVer = 5) and (minorVer = 0) then
            Result := cOsWin2000
          else if (majorVer = 5) and (minorVer = 1) then
            Result := cOsXP
          else
            Result := cOsUnknown;
        end;
      VER_PLATFORM_WIN32_WINDOWS:  { Windows 9x/ME }
        begin
          if (majorVer = 4) and (minorVer = 0) then
            Result := cOsWin95
          else if (majorVer = 4) and (minorVer = 10) then
          begin
            if osVerInfo.szCSDVersion[1] = ´A´ then
              Result := cOsWin98SE
            else
              Result := cOsWin98;
          end
          else if (majorVer = 4) and (minorVer = 90) then
            Result := cOsWinME
          else
            Result := cOsUnknown;
        end;
      else
        Result := cOsUnknown;
    end;
  end
  else
    Result := cOsUnknown;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(GetOperatingSystem));
end;


{************************************************}
{ Some useful functions                          }
{************************************************}

function IsXP: Boolean;
var
  OS: TOSVERSIONINFO;
begin
  OS.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO);
  GetVersionEx(osv);
  Result := (OS.dwPlatformId = VER_PLATFORM_WIN32_NT) and
    (OS.dwMajorVersion = 5) and (OS.dwMinorVersion = 1);
end;

function IsWin2000: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  Result := (OS.dwMajorVersion >= 5) and
    (OS.dwPlatformId = VER_PLATFORM_WIN32_NT);
end;


function IsWinNT2: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  Result := OS.dwPlatformId = VER_PLATFORM_WIN32_NT;
end;

{ or: }

function IsWinNT2: Boolean;
begin
  Result := Win32Platform = VER_PLATFORM_WIN32_NT;
end;


function IsWinME: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  Result := (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 90) and
    (OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;


function IsWin95: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  Result := (OS.dwMajorVersion >= 4) and (OS.dwMinorVersion = 0) and
    (OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;

{************************************************}
{ Function to detect OS Version by Nico Bendlin  }
{************************************************}


{$IFDEF CONDITIONALEXPRESSIONS}
  {$IF Defined(TOSVersionInfoEx)}
    {$DEFINE TOSVERSIONINFOEX_DEFINED}
  {$IFEND}
{$ENDIF}
{$IFNDEF TOSVERSIONINFOEX_DEFINED}

type
  POSVersionInfoEx = ^TOSVersionInfoEx;
  TOSVersionInfoEx = packed record
    dwOSVersionInfoSize: DWORD;
    dwMajorVersion     : DWORD;
    dwMinorVersion     : DWORD;
    dwBuildNumber      : DWORD;
    dwPlatformId       : DWORD;
    szCSDVersion       : array [0..127] of AnsiChar;
    wServicePackMajor  : Word;
    wServicePackMinor  : Word;
    wSuiteMask         : Word;
    wProductType       : Byte;
    wReserved          : Byte;
  end;

const
  VER_SERVER_NT                       = $80000000;
  {$EXTERNALSYM VER_SERVER_NT}
  VER_WORKSTATION_NT                  = $40000000;
  {$EXTERNALSYM VER_WORKSTATION_NT}
  VER_SUITE_SMALLBUSINESS             = $00000001;
  {$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
  VER_SUITE_ENTERPRISE                = $00000002;
  {$EXTERNALSYM VER_SUITE_ENTERPRISE}
  VER_SUITE_BACKOFFICE                = $00000004;
  {$EXTERNALSYM VER_SUITE_BACKOFFICE}
  VER_SUITE_COMMUNICATIONS            = $00000008;
  {$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
  VER_SUITE_TERMINAL                  = $00000010;
  {$EXTERNALSYM VER_SUITE_TERMINAL}
  VER_SUITE_SMALLBUSINESS_RESTRICTED  = $00000020;
  {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
  VER_SUITE_EMBEDDEDNT                = $00000040;
  {$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
  VER_SUITE_DATACENTER                = $00000080;
  {$EXTERNALSYM VER_SUITE_DATACENTER}
  VER_SUITE_SINGLEUSERTS              = $00000100;
  {$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
  VER_SUITE_PERSONAL                  = $00000200;
  {$EXTERNALSYM VER_SUITE_PERSONAL}
  VER_SUITE_BLADE                     = $00000400;
  {$EXTERNALSYM VER_SUITE_BLADE}
  VER_SUITE_EMBEDDED_RESTRICTED       = $00000800;
  {$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED}
  VER_SUITE_SECURITY_APPLIANCE        = $00001000;
  {$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE}

const
  VER_NT_WORKSTATION              = $0000001;
  {$EXTERNALSYM VER_NT_WORKSTATION}
  VER_NT_DOMAIN_CONTROLLER        = $0000002;
  {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER}
  VER_NT_SERVER                   = $0000003;
  {$EXTERNALSYM VER_NT_SERVER}

{$ENDIF}  // TOSVERSIONINFOEX_DEFINED


function GetOSVersionInfo(var Info: TOSVersionInfoEx): Boolean;
begin
  FillChar(Info, SizeOf(TOSVersionInfoEx), 0);
  Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
  Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
  if (not Result) then
  begin
    FillChar(Info, SizeOf(TOSVersionInfoEx), 0);
    Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
    Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
    if (not Result) then
      Info.dwOSVersionInfoSize := 0;
  end;
end;

function GetOSVersionText: string;
var
  Info: TOSVersionInfoEx;
  Key: HKEY;
begin
  Result := ´´;
  if (not GetOSVersionInfo(Info)) then
    Exit;
  case Info.dwPlatformId of
    { Win32s }
    VER_PLATFORM_WIN32s:
      Result := ´Microsoft Win32s´;
    { Windows 9x }
    VER_PLATFORM_WIN32_WINDOWS:
      if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 0) then
      begin
        Result := ´Microsoft Windows 95´;
        if (Info.szCSDVersion[1] in [´B´, ´C´]) then
          Result := Result +´ OSR2´;
      end
      else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 10) then
      begin
        Result := ´Microsoft Windows 98´;
        if (Info.szCSDVersion[1] = ´A´) then
          Result := Result + ´ SE´;
      end
      else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 90) then
        Result := ´Microsoft Windows Millennium Edition´;
    { Windows NT }
    VER_PLATFORM_WIN32_NT:
      begin
        { Version }
        if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then
          Result := ´Microsoft Windows Server 2003´
        else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 1) then
          Result := ´Microsoft Windows XP´
        else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then
          Result := ´Microsoft Windows 2000´
        else
          Result := ´Microsoft Windows NT´;
        { Extended }
        if (Info.dwOSVersionInfoSize >= SizeOf(TOSVersionInfoEx)) then
        begin
          { ProductType }
          if (Info.wProductType = VER_NT_WORKSTATION) then
          begin
            if (Info.dwMajorVersion = 4) then
              Result := Result + #10´Workstation 4.0´
            else if(Info.wSuiteMask and VER_SUITE_PERSONAL <> 0) then
              Result := Result + 10´Home Edition´
            else
              Result := Result + #10´Professional´;
          end
          else if (Info.wProductType = VER_NT_SERVER) then
          begin
             if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then
             begin
               if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
                 Result := Result + 10´Datacenter Edition´
               else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                 Result := Result + 10´Enterprise Edition´
               else if (Info.wSuiteMask = VER_SUITE_BLADE) then
                 Result := Result + 10´Web Edition´
               else
                 Result := Result + 10´Standard Edition´;
             end
             else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then
             begin
               if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
                  Result := Result + #10´Datacenter Server´
               else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                  Result := Result + 10´Advanced Server´
               else
                  Result := Result + 10´Server´;
             end
             else
             begin
               Result := Result + 10´Server ´ +
                 IntToStr(Info.dwMajorVersion) + ´.´ +
                 IntToStr(Info.dwMinorVersion);
               if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                 Result := Result + ´, Enterprise Edition´;
             end;
          end;
        end;
        { CSDVersion }
        if (Info.dwMajorVersion = 4) and
          (StrIComp(Info.szCSDVersion, ´Service Pack 6´) = 0) and
          (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            ´SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\Q246009´, 0,
            KEY_QUERY_VALUE, Key) = ERROR_SUCCESS) then
        begin
          Result := Result + #10´Service Pack 6a´;
          RegCloseKey(Key);
        end
        else
          Result := Result + 10 + StrPas(Info.szCSDVersion);
        Result := Result + 10´(Build ´ +
          IntToStr(Info.dwBuildNumber and $FFFF) + ´)´;
      end;
  end;
end;

////////////////////////////////////////////////////////////////////////////////

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


e como faço pra declarar as variáveis no type? quando fui compilar apareceu undeclared identifier: ´Cos Unknown´ ´Cos WinNT´ ´Cos Win2000´.......


GOSTEI 0
Rjun

Rjun

09/08/2005

To postando uma versão simplificada. Ele só faz o teste se é XP.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function IsXP: Boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.IsXP: Boolean;
var
  OS: TOSVERSIONINFO;
begin
  OS.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO);
  GetVersionEx(OS);
  Result := (OS.dwPlatformId = VER_PLATFORM_WIN32_NT) and
    (OS.dwMajorVersion = 5) and (OS.dwMinorVersion = 1);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  if IsXP then
  begin
    Edit1.PasswordChar := ´|´
    Edit1.Font.Name := ´Wingdings´;
  end
  else
    Edit1.PasswordChar := ´*´;
end;

end.



GOSTEI 0
Duolon

Duolon

09/08/2005

deu erro nessa linha de [b]Missing operator or semicolon/b]

edit1.Font.Name := ´Wingdings´;



GOSTEI 0
Rjun

Rjun

09/08/2005

Foi mal...coloque o ponto e virgula na linha anterior.

Edit1.PasswordChar := ´|´;


Só uma coisa...eu não testei esse código, pq não tenho nenhum Windows q não seja XP.


GOSTEI 0
Duolon

Duolon

09/08/2005

Foi mal...coloque o ponto e virgula na linha anterior.
Edit1.PasswordChar := ´|´;
Só uma coisa...eu não testei esse código, pq não tenho nenhum Windows q não seja XP.


Agora compilou blz, mais quando execulto, fica normal em vez do ´*´ do XP ou do ´*´ dos outros windows aparece as letras, tipo asdfgjhj no lugar no ´*´

precisa mudar alguma coisa nas propriedades do edit1?

testa ae vc mesmo em qualquer windows pra vc ver q ñ aparece nenhum ´*´


GOSTEI 0
Rjun

Rjun

09/08/2005

No XP eu testei e funcionou beleza...seu Edit chama Edit1 mesmo?


GOSTEI 0
Duolon

Duolon

09/08/2005

No XP eu testei e funcionou beleza...seu Edit chama Edit1 mesmo?


sim se chama Edit1, se teria dado erro na compilação..
vc mudo alguma coisa em PasswordChar na propriedade do Edit1 ou em mais alguma coisa?

pq aki nessa propriedade está como #0 por esse motivo tá aprecedendo os caracteres do teclado em vez de ´*´


GOSTEI 0
Duolon

Duolon

09/08/2005

ops, agora funcionou...

eu tinha colado o codigo do jeito q vc me passou, depois dei 2 click no evento OnShow do formulário e funcionou, ñ sei pq... valew cara :D


GOSTEI 0
Duolon

Duolon

09/08/2005

Só mais uma coisa, como q fica esse código com 3 edits, tipo Edit1, Edit2 e Edit3???

procedure TForm1.FormShow(Sender: TObject);
begin
  if IsXP then
  begin
    Edit1.PasswordChar := ´l´;
    Edit1.Font.Name := ´Wingdings´;
  end
  else
    Edit1.PasswordChar := ´*´;
end;



GOSTEI 0
Rjun

Rjun

09/08/2005

Só mais uma coisa, como q fica esse código com 3 edits, tipo Edit1, Edit2 e Edit3???


procedure TForm1.FormShow(Sender: TObject);
begin
  if IsXP then
  begin
    Edit1.PasswordChar := ´l´;
    Edit1.Font.Name := ´Wingdings´;
    Edit2.PasswordChar := ´|´;
    Edit2.Font.Name := ´Wingdings´;
    Edit3.PasswordChar := ´|´;
    Edit3.Font.Name := ´Wingdings´;
  end
  else
  begin
    Edit1.PasswordChar := ´*´;
    Edit2.PasswordChar := ´*´;
    Edit3.PasswordChar := ´*´;
  end;
end;



GOSTEI 0
Duolon

Duolon

09/08/2005

Valew, só falta testar em outro windows q ñ for o XP pra ver se funfou..


GOSTEI 0
POSTAR