Pular para o conteúdo principal

Postagens

Mostrando postagens de junho, 2008

Palavra com a primeira letra em Maiúsculo (Delphi)

Para casos onde temos palavras que são armazenadas todas em maiúsculo, geralmente surge a necessidade de utiliza-la de uma maneira mais elegante, como o título sugere, então vamos lá: function Primeira_Letra_Maiuscula(p_texto: string): string; begin IF p_texto <> '' THEN result := UpperCase(Copy(p_texto,1,1))+LowerCase(Copy(p_texto,2,Length(p_texto))); end;

Consulta Top-N SQL Server

Esse tipo de consulta é útil em situações onde precisamos encontrar, por exemplo, os N maiores ou menores dentro de determinado grupo, os funcionários mais bem pagos, os que vendem mais, as mercadorias menos vendidas e assim por diante. No SQL Server utilizamos o predicado TOP para recuperar um determinado número de registros e ordenamos a consulta com o ORDER BY. Baixe aqui o script com a criação da tabela e os inserts para o teste. No exemplo abaixo desejamos encontrar os três funcionários que ganham mais: SELECT TOP 3 NOM_FUNC NOME, SAL_FUNC SALARIO FROM FUNCIONARIOS ORDER BY SAL_FUNC DESC Agora desejamos encontrar os três funcionários que possuem os menores salários: SELECT TOP 3 NOM_FUNC NOME, SAL_FUNC SALARIO FROM FUNCIONARIOS ORDER BY SAL_FUNC Podemos perceber que ambos os códigos são idênticos, precisamos apenas mudar a ordem na cláusula ORDER BY.

Centralizar Texto em Edit

Como todos sabemos o Edit mantém todo texto digitado a esquerda, o que não fica bem quando o usamos para a entrada de números, pois bem, o exemplo abaixo apresenta uma alternativa para centralizar um determinado valor dentro de um Edit: procedure EditChange(Sender: TObject); var vl_label : TLabel; //variável do tipo Label begin vl_label := TLabel.Create(self); //criamos um label WITH vl_label DO BEGIN Font.Name := TEdit(sender).Font.Name; //pegamos a fonte usada no edit Caption := TEdit(sender).Text; //pegamos o conteúdo do edit SendMessage(TEdit(sender).Handle, EM_SETMARGINS, EC_LEFTMARGIN, (TEdit(sender).Width-vl_label.Width) div 2); //centraliza no label e retorna para o edit END ; vl_label.Free; end ;

Remover pontos de nome de arquivo (Delphi)

O exemplo a seguir nos mostra como remover pontos de um nome de arquivo, deixando é claro o da extensão: procedure TForm1.Button1Click(Sender: TObject); var vl_a: integer; vl_i: integer; begin //verifica indice do ultimo ponto FOR vl_i:= Length(LabeledEdit1.Text) DOWNTO 1 DO BEGIN IF Copy(LabeledEdit1.Text, vl_i, 1) = '.' THEN BEGIN vl_a := vl_i; Break; END; END; //copia texto ignorando os pontos, exceto quando o ponto estiver no inidice encontrado //anteriormente FOR vl_i:= 1 TO Length(LabeledEdit1.Text) DO BEGIN IF ( Copy(LabeledEdit1.Text, vl_i, 1) <> '.' ) THEN LabeledEdit2.Text := LabeledEdit2.Text + Copy(LabeledEdit1.Text, vl_i, 1) ELSE IF ( vl_i = vl_a ) THEN LabeledEdit2.Text := LabeledEdit2.Text + Copy(LabeledEdit1.Text, vl_i, 1) END; end; Baixe o exemplo aqui .

Mover ponteiro do Mouse automaticamente (Delphi)

Em certas ocasiões desejamos fazer com que o usário veja determinada funcionalidade, ou mesmo tentamos indicar o melhor procedimento a tomar naquele momento, nada melhor como mover o ponteiro do mouse, já que concentramos certa atenção nele, então vamos ao exemplo: var vl_p: TPoint; begin vl_p.X := 315; vl_p.Y := 89; vl_p := ClientToScreen(vl_p); SetCursorPos(vl_p.X, vl_p.Y); end; Baixe o exemplo completo aqui .

Descobrir tipo do Arquivo (Delphi)

Segue um exemplo de como verificar o tipo de um determinado arquivo, digita-se o nome do arquivo juntamente com o caminho no Edit1, e ao clicar no botão o Edit2 recebe o tipo do arquivo: Function TipoArquivo(const p_File: String): String; var v_Inf: TSHFileInfo; begin IF SHGetFileInfo(PChar(p_File),0,v_Inf,Sizeof(v_Inf),SHGFI_TYPENAME) <> 0 THEN Result := StrPas(v_Inf.szTypeName) ELSE BEGIN Result := ExtractFileExt(p_File); Delete(Result,1,1); Result := Result +' File'; END; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit2.Text := TipoArquivo(Edit1.Text); end; Baixe o exemplo aqui .

Trigger no Mysql

Uma trigger é um objeto de banco de dados associado a uma tabela, e de acordo com uma determinada ação executada nesta tabela a trigger é executada. Sintaxe: DELIMITER | CREATE TRIGGER trigger_nome -- nome da trigger trigger_tempo -- quando a trigger dispara(AFTER, BEFORE) trigger_evento -- evento que a dispara(INSERT, UPDATE, DELETE) ON tabela_nome -- tabela que a trigger faz referência FOR EACH ROW -- deve ser disparada para todos os registros trigger_comandos END; | DELIMITER ; Exemplo: DELIMITER | CREATE TRIGGER log_usuario AFTER INSERT ON usuarios FOR EACH ROW BEGIN INSERT INTO log SET user_id=NEW.id, data=NOW(); END; | DELIMITER ; Nesse exemplo foi criada uma trigger de log , que para cada inserção na tabela usuarios insere também um registro na tabela log .

Mudar Cursor de Edit Criado Dinamicamente

Temos o seguite caso, devemos criar Edits em tempo de execução, onde sempre que o ponteiro do mouse passar por um Edit, seja ele qual for, o ponteiro do Mouse deve mudar, apresentando dois tipos distintos, um para o caso do Edit estar vazio e outro quando ele estiver preenchido, além do fato de que quando um certo formulário for aberto o conteúdo do Edit selecionado deve ir para um Edit do novo formulário, segue abaixo o código, ou baixe aqui o exemplo: var Form1 : TForm1; Edt : TEdit; Cont : integer = 1; vLeft : integer = 8; vTop : integer = 40; vWidth : integer = 81; vHeight: integer = 21; vSelect: string; implementation uses Unit2; {$R *.dfm} procedure TForm1.criaEdt(p_left: integer; p_top: integer; p_width: integer; p_nome: string); begin Edt := TEdit.Create(Self); WITH Edt DO BEGIN Parent := Self; Left := p_left; Top := p_top; Width := p_width; Height := 21; Name := 'A'+p_nome; OnMouseMove:= EdtMouseMov

Manipular o Registro do Windows

Algumas vezes surge a necessidade de se utilizar os valores do registro do windows, então em primeiro lugar devemos ter em mente exatamente qual a chave devemos procurar, no nosso exemplo vamos buscar o nome do usuário logado no windows, então vamos ao exemplo: var objRegistro : TRegistry; begin vl_objRegistro := TRegistry.Create; TRY vl_objRegistro.RootKey := HKEY_CURRENT_USER; IF vl_objRegistro.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer', True) THEN Edit.Text := UpperCase( vl_objRegistro.ReadString('Logon User Name') ); FINALLY objRegistro.Free; END; end;

Inserir e retirar itens de ListBox

Nesse exemplo temos uma lista de itens em um ComboBox e quando clicamos no botao inserir o ListBox é verificado, caso não haja um item igual ele insere, e o botao remove faz o oposto, verifica se o item existe, caso exista ele é removido. Baixe aqui o exemplo. procedure TForm1.InserirClick(Sender: TObject); var v_i: integer; v_a: boolean; begin //VERIFICA SE JÁ EXISTE ALGUM ITEM IGUAL, SE TIVER NÃO INSERE TRY FOR v_i := 0 TO ListBox1.Items.Count-1 DO BEGIN IF ComboBox1.Text = ListBox1.Items[v_i] THEN BEGIN v_a := TRUE; Break; END ; END ; IF v_a = FALSE THEN ListBox1.Items.Add(ComboBox1.Text); EXCEPT END ; end; procedure TForm1.RemoverClick(Sender: TObject); var v_i: integer; begin //VERIFICA SE JÁ EXISTE ALGUM ITEM IGUAL, SE TIVER DELETA TRY FOR v_i := 0 TO ListBox1.Items.Count-1 DO BEGIN IF ComboBox1.Text = ListBox1.Items[v_i] THEN ListBox1.Items.Delete(v_i); END ; EXCEPT END ; end ;

Armazenando BMP's em arquivo de recurso ".RES"

1. Crie um arquivo texto, com um nome qualquer e a extensão ".RC", para o exemplo usaremos "RECURSO.RC". Nesse arquivo digite o seguinte: GRAFICO BITMAP "C:\Imagens\Grafico.bmp" Lembrando que para cada imagem teremos uma linha. 2. Após salvar o arquivos devemos Compilar o mesmo usando o programa BRCC32.EXE localizdo no diretorio BIN do Delphi, feito isso, sera gerado o arquivo RECURSO.RES. 3. Na Unit que usará o recuro devemos colocar o seguinte: {$R RECURSOS.RES} Para usar a imagem contida no arquivo de recurso precisamos apenas criar uma variavel do tipo bitmap e depois executar o seguinte comando: VarTipoTBitmap:= LoadBitmap(HInstance,'BITMAP_1');

Consulta Top-N Oracle

Esse tipo de consulta é útil em situações onde precisamos encontrar, por exemplo, os N maiores ou menores dentro de determinado grupo, os funcionários mais bem pagos, os que vendem mais, as mercadorias menos vendidas e assim por diante. Para conseguirmos isso no Oracle precisaremos implementar uma consulta interna (ou view em linha), que irá retornar todos os registros necessários, e na consulta externa iremos limitar a exibição num total desejado. Baixe aqui o script com a criação da tabela e os inserts para o teste. No exemplo abaixo desejamos encontrar os três funcionários que ganham mais: SELECT NOME, SALARIO FROM ( SELECT FU.NOM_FUNC NOME, FU.SAL_FUNC SALARIO FROM FUNCIONARIOS FU ORDER BY FU.SAL_FUNC DESC ) WHERE ROWNUM <= 3 Agora desejamos encontrar os três funcionários que possuem os menores salários: SELECT NOME, SALARIO FROM ( SELECT FU.NOM_FUNC NOME, FU.SAL_FUNC SALARIO FROM FUNCIONARIOS FU ORDER BY FU.SAL_FUNC ) WHERE ROWNUM <= 3 P