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:= EdtMouseMove;
OnEnter := EdtEnter;
Se…

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
ORDERBY FU.SAL_FUNCDESC
)
WHEREROWNUM <= 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
ORDERBY FU.SAL_FUNC
)
WHEREROWNUM <= 3

Podemos perceber que a consulta interna é muito parecida e…