Dicas

  • Mudando a função função da tecla ENTER como TAB em um Form
  • Mudando a função função da tecla ENTER como TAB em um DBGrid
  • Como verificar o estado das teclas num lock, caps lock e Num lock 
  • Determine a Localização do mouse
  • Habilitando e desabilitando Ctrl+Alt+Del
  • Determine se o sistema esta usando fontes grandes ou pequenas
  • Determine a cofiguração de cores da tela
  • Determine a data e a hora corrente
  • Obtenha a localização do diretório do Windows e System
  • Obtenha a localização do diretório do temporário do windows
  •  


     

    Mudando a função da tecla ENTER para funcionar como TAB em um Form

    Para qua a tecla ENTER funcione com TAB, você deverá:
    Setar a propriedade KeyPreview do Form para true;
    Setar a propiedade Default de todos os botões do Form para false;
    Incluir o código abaixo no evento OnKeyPreview do Form.

        if( Key == 13 )  {
           Perfom( WM_NEXTDLGCTL, 0, 0 );
           Key = 0;
        }
  • Retorna


  • Como verificar o estado das teclas Num lock, Caps lock e Scroll lock

    A função GetKeyState( ) retornará true se a tecla estiver ON ou false se estive OFF

         GetKeyState( VK_NUMLOCK )
         GetKeyState( VK_SCROLL )
         GetKeyState( VK_CAPITAL )
     

    Determine a localização do mouse

    Chame a função da API GetCursorPos. Você passa a função o ponteiro de uma classe TPoint.

        void __fastcall TForm1::Timer1Timer(TObject *Sender)
        {
           // este exemplo irá mostrar as coordenadas do mouse
           TPoint pt;
           GetCursorPos(&pt);
           Label1->Caption = "("+IntToStr(pt.x)+")("+IntToStr(pt.y)+")";
        }

    Habilitando e desabilitando Ctrl+Alt+Del

    Chame a função SystemParametersInfo( ) passando os seguintes parâmetros:

    SystemParametersInfo( 97, opção1, &opção2, 0 );
    Onde:
    opção1 é true para desabilitar e false para habilitar.
    opção2 é o endereço de um int qualquer.


    Determine se o sistema esta usando fontes grande ou pequena

    A maneira mais fácil de fazer isto é ler a propriedade PixelsPerInch do objeto global Screen. Se o valor é 96, então o sistema esta ajustado para fontes pequena. Se PixelsPerInch é 120, então esta ajustado para fonte grande. É possível que PixelsPerInch seja diferente de 96 ou 120 porque o usuário pode ter ajustado diretamente por escala.

    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    
     {
      if(Screen->PixelsPerInch == 96)
        Label1->Caption = "Fonte pequena em uso";
      else if(Screen->PixelsPerInch == 120)
        Label1->Caption = "Fonte grande em uso";
      else
      {
        float Ratio = ((float)Screen->PixelsPerInch) / 96.0;
        Ratio *= 100.0;
        Label1->Caption = "Fontes ajustadas para " +
                          IntToStr((int)Ratio) +  " %";
      }
    }

    Determine a configuração de cores da tela(256 cores, 16 bit, etc)

    A função da API GetDeviceCaps permite que você determine a configuração da tela. GetDeviceCaps leva dois argumentos: um handle para o dispositivo de contexto e um identificador para o parâmetro que você quer encontrar.

    
    int GetDeviceCaps( HDC hdc,int nIndex); // handle para o dispositivo de contexto
      					// parâmetro

    O seguinte código demostra como determinar a configuração de cores do sistema. Como bônus, GetDeviceCaps dirá como se o sistema esta usando palettes.

    
        int BitsPerPixel  = GetDeviceCaps(Canvas->Handle,BITSPIXEL);
        int Planes         = GetDeviceCaps(Canvas->Handle,PLANES);
        BitsPerPixel *= Planes; 
                  
        bool UsesPalettes =  (bool)(GetDeviceCaps(Canvas->Handle, 
                 RASTERCAPS) & RC_PALETTE);
    
        if(UsesPalettes)
                Label1->Caption = "A tela utiliza palettes";
        else
                Label1->Caption = "A tela não usa palettes";
    
        switch (BitsPerPixel)
        {
          case 24: 
            Label2->Caption = "24-bit true color";
            break;
          case 16:
            Label2->Caption = "16-bit high color";
            break;
          case 8:
            Label2->Caption = "Modo 256 cores";
            break;
          case 4:
            Label2->Caption = "Modo 16 cores";
            break;
          case 1:
            Label2->Caption = "Modo Monocromático";
            break;
          default:
            Label2->Caption = "A tela suporta " + IntToStr(1<< BitsPerPixel) +
                              " diferentes cores";
            break;
        }

    Determine a data e hora corrente

    A classe VCL TDateTime é a maneira mais fácil de obter a data e o hora corrente. O código exemplo abaixo, mostra como fazer isto. O primeiro bloco do código mostra como recuperar a data e a hora. O restante do código mostra outros usos para TDateTime.

        // Obtêm a hora e a data corrente
        Label1->Caption = TDateTime::CurrentDateTime().TimeString();
        Label2->Caption = TDateTime::CurrentDateTime().DateString();
    
        // Ajusta um intervalo de tempo
        // Primeiro, declara uma constante TDateTime que representará 
        // o intervalo de 1000 segundos. TDateTime possui diferentes 
        // construtores. Este inicializa as horas, minutos, segundos
        // e milisegundos
        const TDateTime OneThousandSeconds = TDateTime(0, 16, 40, 0);
        // cria um TDateTime object para a hora corrente
        TDateTime CurrentTime(TDateTime::CurrentDateTime());
    
        // adiciona o intervalo a hora corrente
        TDateTime EndTime = CurrentTime + OneThousandSeconds;
    
        // adicione código para verificar se
        // o intervalo foi expirado
        if(TDateTime::CurrentDateTime() > EndTime)
          Application->MessageBox("Intervalo de tempo expirado",
                                  "Tempo" , MB_OK);
    
        // Ajusta um intervalo de 60 dias a partir da data corrente
        // Primeiro, armazene a data corrente
        TDateTime CurrentDate(TDateTime::CurrentDate());
    
        // adiciona 60 dias a data corrente
        TDateTime EndDate = CurrentDate + (double)60;
    
        // verifica se o intervalo expirou
        if(TDateTime::CurrentDateTime() > EndDate)
          Application->MessageBox("Periodo de avalização expirado",
                                  "Demo",MB_OK);
    
        // Obtendo o ano, mês e dias de uma data
        TDateTime ElapsedFreedomTime = TDateTime::CurrentDate();
        unsigned short years, months, days;
    
        ElapsedFreedomTime.DecodeDate(&years, &months, &days);
        years -= 1900;  // ano inicia em 1900
        AnsiString msg =  IntToStr( years)  + " anos, " +
                         IntToStr( months) + " meses, e " +
                         IntToStr( days) + " dias.";
        Application->MessageBox(msg.c_str(), "Tempo",MB_OK);

    Obtenha a localização do diretório do Windows e System

    Chame a função da API GetWindowsDirectory para obter o diretório do Windows. Chame GetSystemDirectory se você quer o diretório system.

    
         AnsiString WinDir;
         UINT       BufferSize = GetWindowsDirectory(NULL,0);
    
         WinDir.SetLength(BufferSize+1);
         GetWindowsDirectory(WinDir.c_str(),BufferSize+1);
    
         AnsiString SysDir;
         BufferSize = GetSystemDirectory(NULL,0);
         SysDir.SetLength(BufferSize+1);
         GetSystemDirectory(SysDir.c_str(),BufferSize+1);

    O segundo argumento de ambas, GetWindowsDirectory e GetSystemDirectory especifica quantos caracteres serão copiados para o buffer. A variável AnsiString aloca o espaço necessário.


    Obtenha a localização do diretório temporário do windows

    O Windows contem um diretório temp que você pode armazenar arquivos temporários. A API possui uma função chamada GetTempPath que permite que seja determinado a localização do diretório temp.

    
         AnsiString TempDir;
         UINT       BufferSize = GetTempPath(0,NULL);
    
         TempDir.SetLength(BufferSize+1);
         GetTempPath(BufferSize+1,TempDir.c_str());

    A API também possui uma função chamada GetTempFileName que permite que você crie arquivos temporários únicos. Entretanto, é de sua responsabilidade deleta-los.


    Mudando a função da tecla ENTER com TAB em um DBGrid

    void_fastcall TForm1::DBGrid1KeyPress(TObject *Sender, char &Key)
    { 
     if( Key == 13 )  {
           PostMessage(DBGrid1->Handle,WM_KEYDOWN,VK_TAB,1 );
           Key = 0;
        }
    }
  • Retorna