Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - cebolaaa

#1
Pessoal, fiz um tutorial para vocês de como ganhar dinheiro utilizando o PTC "bux.to". Ta em .doc, vou postar aqui o link... Dai fiz um programa tambem de banco de dados pra ajudar a galera na criação de accounts e tals, pra organizar tudo e bla bla bla.

Espero que gostem.

Link (728k): http://rapidshare.com/files/133862540/P ... l.zip.html

senha: www.hacking-nation.com/hazz
#2
Para mim nao.
Eu ja programo em delphi, entao fika bem + facil aderir ao delphi dotnet.
Porem, estou iniciando tbm em C# com o vs 2008.
Mas o delphi para mim seria te total utilidade, ainda + para desenvolver aplicativos para palm top, celulares, e afins.
Sem contar que com ele é mto mais facil a manipulacao de bancos de dados.
#3
Pessoal. Nao acho de jeito nenhum.
To querendo entrar na era .NET com o Delphi.
Peguei o 2006 .NET, consegui acha-lo, porem sem o crack =/.
Será que alguem pode por favor me conseguir o crack do 2006 .net ou o 2007 .net com crack?
Obrigado.
#4
Delphi / Re: Ajuda - Leitura de Strings (Complicado)
03 de May , 2008, 05:41:13 PM
tudo ajuda xD. se puder entao man, posta ai como q se faz em C, dai eu tento entender e procurar se há no delphi methodos equivalentes. Obrigado.
#5
Alocação Dinâmica em Delphi

Hi,

Particularmente, não gosto muito de Delphi. Todavia, sei que trata-se de uma linguagem relativamente fácil, poderosa e que tem sido utilizada por muitos.
Fazendo algumas comparações com a linguagem C, decidi escrever um pequeno artigo abordando a alocação dinâmica de memória em Delphi, já que havia feito um outro em C.

Retomando o que é a alocação dinâmica, podemos dizer que se trata de uma técnica que nos permite reservar uma quantidade determinada de memória que será utilizada por um variável, em tempo de execução.

Apenas para lembrar, quando declaramos uma variável como a abaixo, é reservado um determinado espaço na memória - que é retirado de uma região denominada HEAP, parte de memória livre - suficiente para esta tal variável:

var
x: Integer;


Considerando que a plataforma em que está se programando é de 32 bits, uma variável do tipo Integer - tipo que a variável "x" pertence - ocupa 4 bytes.

Este espaço é definido na compilação do programa.

O princípio da alocação dinâmica está justamente ai, variáveis estatáticas (como a variável "x" por exemplo) têm um espaço reservado a elas durante a compilação, variáveis dinâmicas (aquelas geradas por alocação, também dinâmica) têm este espaço reservado durante a execução do programa, isto é, em run-time..

Para podermos alocar memória, devemos declarar um ponteiro para um determinado tipo.

Em Delphi, declaramos um ponteiro da seguinte forma:
var
NOME_PONTEIRO: ^tipo

ou

var
NOME_PONTEIRO: Ptipo

Onde "tipo" seria o tipo de variável. Exs: integer, char, etc.

Exemplos:
var
p: ^Integer; // Um ponteiro para inteiro

var
p: PInteger; // Também um ponteiro para inteiro


Podemos utilizar o seguinte cojunto de funções:

» New e Dispose
» GetMem ou AllocMem e FreeMem.

As funções New e Dispose são utilizadas para alocar e liberar memória, respectivamente. E as outras funções, também =)

Mas qual seria a diferença? A diferença está na forma como a alocação é feita. Utilizamos a função New() para alocar memória em um ponteiro para uma variável cujo tamanho é conhecido, isto é, que o compilador consegue identificar quantos bytes este tipo de dado ocupa na memória. A função Dispose() é utilizada para liberar memória alocada em ponteiro através de New().

Já as funções GetMem() e AllocMem() são utilizadas para alocar memória em ponteiros para tipos de dado onde o compilador desconhece seus respectivos tamanhos ou se optarmos por especificar este tamanho manualmente.
A função FreeMem() é utilizada para liberar memória alocada pela função GetMem() ou AllocMem(). Mas qual a diferença entre estas últimas?
A diferença entre GetMem() e AllocMem() é que, enquanto GetMem() não preenche a memória alocada com ZEROS, AllocMem() o faz. Há, também, uma pequena diferença quanto à sintaxe das funções, que será vista mais adiante.

Vamos ver o primeiro exemplo - utilizando as funções New() e Dispose()
var
p: ^Integer;
begin
New(p);
p^ := 10;
ShowMessage('O valor de "p" é: ' + IntToStr(p^));
Dispose(p);
end;

Passo a passo:
p: ^Integer;


Declaramos um ponteiro para inteiro.

O tamanho de um inteiro é reconhecido pelo compilador, portanto, podemos utilizar a função New() para alocar memória:
New(p);

Abaixo nós atribuímos um valor qualquer à variável alocada:
p^ := 10;


Por que fizemos "p^ := 10" e não "p := 10" ?

Simplesmente pelo fato de que "p" é um ponteiro para inteiro, e não uma variável comum do tipo inteiro =)

Quando temos um ponteiro, para atribuir um valor, fazemos
NOME_PONTEIRO^ := valor;

Abaixo nós mostramos o valor da variável:
ShowMessage('O valor de "p" é: ' + IntToStr(p^));


Note novamente que utilizamos "p^" para acessarmos o valor do ponteiro. E note ainda que utilizamos uma função auxiliar - IntToStr(). Utilizamos esta função para converter um valor de Inteiro (tipo do ponteiro) para String, que é o tipo de argumento que a função ShowMessage() requere.

Após o uso do ponteiro devemos liberar a memória que foi alocada nele:
Dispose(p);



Poderíamos resumir o uso em:
New(PONTEIRO); // Alocar memória em "PONTEIRO"
Dispose(PONTEIRO); // Liberar memória previamente alocado em "PONTEIRO"

Mas o que aconteceria caso não houvesse memória suficiente para alocar no ponteiro? No caso, uma exceção seria gerada - EOutOfMemory, memória insuficiente - e teríamos que tratá-la Veja:
var
p: ^Integer;
begin
try
New(p);
except
ShowMessage('Memória insuficiente');
ExitProcess(0);
end;
p^ := 10;
ShowMessage('O valor de "p" é: ' + IntToStr(p^));
Dispose(p);
end;

Veja o trecho:
try
New(p);
except
ShowMessage('Memória insuficiente');
ExitProcess(0);
end;


O programa tenta alocar a memória necessária em "p". Caso ocorra algum erro, o programa exibe uma mensagem e encerra.

Vejamos agora como utilzar as funções GetMem(), AllocMem() e FreeMem().

Como já se sabe, GetMem() e AllocMem() são utilizadas para alocar memória.
Geralmente, utilizamos estas funções para alocar memória em variáveis do tipo Char, mais especificamente em ponteiros para Char - caracteres na linguagem C".
Muitas funções da API do Windows requerem este tipo de dado para retornar valores, como por exemplo a função GetWindowsDirectory() que retorna o diretório do Windows.

Em situação normal teríamos:
var
p:array[0..255] of char;
begin
GetWindowsDirectory(p,255);
ShowMessage(p);
end;

Note que "p" é um array do tipo "char" - uma string em C.
Com alocação dinâmica, poderíamos fazê-lo da seguinte forma:
var
p:PChar;
begin
GetMem(p,255);
GetWindowsDirectory(p,255);
ShowMessage(p);
FreeMem(p);
end;


Vamos ver o que ocorre:
p:PChar;

Como se sabe, temos um ponteiro para "char" (equivale a 'char *' em C, que também poderia ser escrito na seguinte forma:
p:^Char;

Mas eu acho mais bonito "PChar" =).

GetMem(p,255);

Acima, nós alocamos 255 bytes no ponteiro "p", ou 255 elementos no ponteiro, assim como o array declarado anteriormente:
p:array[0..255] of char;

O diretório do windows é armazenado na variável através da função:
GetWindowsDirectory(p,255);


Note que não precisamos fazer "p^", pois a função GetWindowsDirectory() requer justamente um array ou ponteiro para char como argumento. Note que o segundo parâmetro da função é a quantidade de memória que alocamos no ponteiro.

O valor é mostrado por:
ShowMessage(p);


A função ShowMessage() converte o valor no formato String em C para String em Delphi, automaticamente =)

Após o uso do ponteiro, liberamos o espaço alocado:
FreeMem(p);

Vejamos como utilizar a função AllocMem() ao invés de GetMem():
var
p:PChar;
begin
p := AllocMem(255);
GetWindowsDirectory(p,255);
ShowMessage(p);
FreeMem(p);
end;

Visualmente, a diferença é pouca. Vamos destacar a linha:
p := AllocMem(255);


Ai está diferença. Enquanto na função GetMem() é o ponteiro é passado como um argumento, não função AllocMem() atribuímos a ele, o valor de retorno - endereço para o primeiro byte alocado.

Outro detalge é que, o ponteiro "p" terá cada byte inicializado com o byte ZERO ou NULO, o que não era feito com GetMem().
A memória também é através da função FreeMem().

Se você reparar bem, não verificamos por possível falha na alocação. Assim como a função New(), caso não exista espaço suficiente para alocar uma variável utilizando as funções GetMem() ou AllocMem(), a exceção "EOutOfMemory" seria gerada.

Para verificar, fazemos:
var
p:PChar;
begin
try
p := AllocMem(255); // Note que poderíamos utilizar também: GetMem(p,255);
except
ShowMessage('Memória insuficiente');
ExitProcess(0);
end;
GetWindowsDirectory(p,255);
ShowMessage(p);
FreeMem(p);
end;


Da maneira acima, um erro na alocação culminaria com a saída do programa.

Embora seja muito recomendado o uso da função New() para alocar dinamicamente tipos de varíaveis conhecidas, já que será alocada a quantidade de bytes correta para o tipo, podemos utilizar GetMem() ou AllocMem() ao invés. Veja:
var
p:PInteger;
begin
try
GetMem(p,sizeof(Integer));
except
ShowMessage('Memória insuficiente');
ExitProcess(0);
end;
p^ := 10; // Atribuímos o valor 10 à variável
ShowMessage('O valor é: ' + IntToStr(p^)); // Mostramos o valor
FreeMem(p);
end;

Neste caso, alocamos o número de bytes que uma variável do tipo Integer ocupa:
GetMem(p,sizeof(Integer));


A função sizeof() retorna o tamanho em bytes que de tipo variável ou estrutura =)


Resumindo o uso das funções, teríamos:
GetMem(PONTEIRO,TAMANHO_EM_BYTES);
PONTEIRO := AllocMem(TAMANHO_EM_BYTES);

E para liberar a memória alocado:
FreeMem(PONTEIRO);

[TEXTO 100% RETIRADO DO SITE: http://www.wesk.org/textos/programacao/delphi/]
#6
Delphi / Ajuda - Leitura de Strings (Complicado)
03 de May , 2008, 04:26:31 AM
Olá.
Seguinte pessoal, eu estou fazendo um programa q atualiza meu soft.
Ja fiz tudas as funcoes que vou usar nele e tals.
O update vai ser um arquivo .RES q vai ter seu conteudo extraido.
Entre este conteudo vamos ter um arquivo executavel e um TXT.
Blz até ai.
So q tipo, eu vou usar o TXT para dar parametros para o prog criar novas tabelas via SQL, e novos campos.
Ai eu fiz assim no arquivo txt:

op=; dbn=; tabn=; fieldn=; fieldtype=;

Eu queria pegar o texto certinho dps dos parametros ate o ;... Por exemplo.

op=1; dbn=1; tabn=Exemplo; fieldn=Exemplo; fieldtype=VChar(64);

Ai queria que o prog pega-se o "1" do "op", o "1" do "dbn", o "Exemplo" do "tabn"... e assim por diante.

Eu sei q tem a função COPY, q sendo ajudada pela POS da pra fazer muita coisa, mas nao consegui fazer isso. Tipo, eu precisava q no texto de uma linha, q vou ler usando a classe TextFile, ele pega-se dps de cada parameto até o ";" o valor.

Alguem tem uma luz de como fazer isto? Agradesço desde ja.
#7
Revistas e eBooks / Re: Especial - Coleção INFO!
27 de February , 2008, 11:50:05 AM
phobia, bom poste porem... nao tem jeito de postar again com uma senha pequena e que dê certo? pq, akela la nao ta dando certo nao, deu pra 2 revistas so q eu baixei... bom, pelos comentarios do post qse ngm ta conseguindo... obrigado por postar cara, porem, de nada adianta seu post se da para baixar os files porem nao da pra descompactar... aliais,, para que por senha?
#8
poxa pessoal... kem baixar a aula e assistir, dps comenta ai, para eu poder publicar + aulas...
deixem opnioes, reclamaões e duvidas...
#9
Pessoal, esta é uma longa video aula de Delphi e Access, encinando como se cria uma DB e como liga-la com uma aplicação Delphi. Abaixo postarei o link para download da video aula e do source do programa e + outro link para download de arquivos que eu fiz que falam o indispensavel de Delphi e banco de dados.

Video Aula:

http://rapidshare.com/files/94578556/Vi ... s.zip.html

Arquivos sobre Delphi e Banco de Dados:

http://rapidshare.com/files/94579711/Co ... i.zip.html

c u la8r.
#10
Delphi / Ajuda com DBCombBox
13 de February , 2008, 08:18:12 AM
Olá.

Eu preciso dar um 'select * from tabela' e mostrar todos os registros de um campo na DBComboBox...

Tentei fazer isto ligado ela por meio de uma DS a uma qry q faz o SQL, e setand o Field da DBComboBox na tabela q eu kero q retorne os valor...
ai eu faço para a qry dar um execSQL.... tentei com open antes e sem...
so q ai tipo, so retorna o 1° registro do campo, os outros nao.. alguem poderia me ajudar?
Obrigado a atenção.
#11
Ola. Seguinte pessoal, fiz um code q funciona pra pegar no ultimo registro de uma table o valor de um campo seu, somar + 1 a este, e jogar num edit.

Ta, funciona? SIM, logico q funciona,,, porem, as veses, da pau... ele joga no registro Last ta tabela, so q nao retorna valor algum do campo, sendo q se vc abrir a DB vc ve la q o registro em last em seu campo pedido ta com valor sim....

olha ae:

...

If AdoQrySearchCliByCod.FieldByName('Codigo').AsString = EdtCodCli.Text Then
        Begin
          AdoQrySearchCliByCod.Close;
          CBoxTipoEmissao.Enabled := False;
          BtnConfirmaCodCliCompra.Caption := 'OK!';
          EdtCodCli.Enabled := False;
          CBTypeOfPayment.Enabled := False;
          MECodCheque.Enabled := False;
          MECodCartao.Enabled := False;
          If EdtCodOs.Text = '' Then
            Begin
              DataModule1.ATComprasEfetuadas.Close;
              DataModule1.ATComprasEfetuadas.Open;
              DataModule1.ATComprasEfetuadas.Last;
              If DataModule1.ATComprasEfetuadas.FieldByName('NumNota').AsString = '' Then
                Begin
                  VNumNotaSTR := '0';
                  VNumNotaDB := StrToCurr(VNumNotaSTR);
                  VNumNotaDB := VNumNotaDB + 1;
                  VNumNotaSTR := CurrToStr(VNumNotaDB);
                  EdtCodOs.Text := VNumNotaSTR;
                  DataModule1.ATComprasEfetuadas.Close;
                  Exit;
                end
              Else If  DataModule1.ATComprasEfetuadas.FieldByName('NumNota').AsString <> '' Then
                Begin
                  //QdoQrySearchNumNota.Close;
                  //qdoqrysearchnumnota.open;
                  //QdoQrySearchNumNota.Last;
                  //QdoQrySearchNumNota.ExecSQL;
                  //VNumNotaSTR := QdoQrySearchNumNota.FieldByName('NumNota').AsString; {OBS:. Na DB este campo tem que ser iniciado com o valor "0".}
                  VNumNotaSTR := DataModule1.ATComprasEfetuadas.FieldByName('NumNota').AsString;
                  VNumNotaDB := StrToCurr(VNumNotaSTR);
                  VNumNotaDB := VNumNotaDB + 1;
                  VNumNotaSTR := CurrToStr(VNumNotaDB);
                  EdtCodOs.Text := VNumNotaSTR;
                  //QdoQrySearchNumNota.Close;
                  DataModule1.ATComprasEfetuadas.Close;
                  Exit;
                end;
            end;
        end
...

ta,,, entao, ele fecha tabela, dps abre, dps da um LASt pra pegar o ultimo reg,,, ai ve se existe de fato um ultimo reg, se nao tiver nenhum reg, ele cria um, se tiver, ele pega o valor do campo e soma + 1....

so q as veses o access nao retorna o valor msm tendo,,, sera q eh pau dele, do delphi ou eu fiz algo errado ae em cima?

ty, t+
#12
entao,,, eu consegui, so q so roda no SQL, access nao, fikou

UPDATE Estoque SET Quantidade = Quantidade + VendasEfetuadas.QuantidadeProd
From Estoque Left Join VendasEfetuadas on Estoque.Codigo = VendasEfetuadas.CodProd
Where VendasEfetuadas.Status = 'Iniciada'

dai fiz um jeito meio manhoso no delphi msm e ja era...
so q um problema... do jeito q fiz, pode acontecer, e vai acontecer, de nao voltar todos os prods se tiver + q 1 pc trabalhando com o prog ao msm tempo e vendendo...

obrigado a ajuda ai... e ah, so + uma coisa... o do modo so pro SQL ali em cima... so retorna um registro... estranho tbm, era pra retornar +.

ty, c u la8er
#13
obrigado xD... mas entao, eu tentei os 2 modos, porem, nenhum deu certo, executei no access pra ver no q dava,,, apareceu a seguinte mensagem: "A ação ou evento solicitado foi bloqueado pelo Modo Desabilitado"... vc sabe o q esta errado? Obrigado.
#14
Olá.

Preciso de ajuda para um update, este faria o seguinte:

Seria trabalhado sobre 2 tabelas, a tabela "Vendas" e a tabela "Estoque".
Na tabela "Vendas" iremos mexer nos campos: Status, NomeProduto, Quantidade.
Na tabela "Estoque" iremos mexer nos campos: NomeProduto e Quantidade.

Teriamos primeiramente que dar um select para selecionar da tabela "Vendas" todos registros onde o campo Status teria o valor igual a: 'Iniciada'.
(Select * From Vendas Where Status = 'Iniciada') -> Até aqui OK.

Depois teriamos de pesquisar na tabela "Estoque" onde o campo "NomeProduto" é igual os registros da tabela "Vendas" que tem o campo "Status" igual a 'Iniciada' e que seu campo "NomeProduto" seja igual ao campo "NomeProduto" da tabela "Estoque".

Após isto, teriamos que somar aos registros encontrados na tabela "Estoque" no campo "Quantidade", o valor do comparado da tabela "Vendas".

Bem, este procedimento serviria para voltar ao estoque, a quantidade que foi retirada deste produto na venda, de uma nota fiscal que teria sido cancelada.

Espero que tenha sido claro e que alguem possa me ajudar. xD
Obrigado.
: 07 Fevereiro 2008, 04:21:49
Tentei fazer algo assim:

UPDATE Estoque SET Quantidade = Estoque.Quantidade + VendasEfetuadas.QuantidadeProd Where VendasEfetuadas.NomeProd = Estoque.Item and VendasEfetuadas.Status = 'Iniciada'

Porém nao deu certo, mas acho que com isso ai da para se ter + noção do que preciso fazer.
#15
Olá. Hoje eu estava conversando com o Defcon sobre programacao, e me achei muito incapacitado, assim, eu aprendo e tals, tenho logica, so q sei la, tem coisas q impacam, ai pensei: Será que tenho um QI mto baixo? Aeuhuaehuaeuhea kem sabe... ja q tava sem nada para fazer, intediado, o dia td chovendo, frio, amigos sumidos e trancado no meu karto na frente do PC como sempre...ai decidi procurar um teste de QI no google, lembrava q tinha feito um teste de QI mas era a mto tempo, e n dera nada de + nem nd de -.... ai axei esse teste aki:

http://www.rachacuca.com.br/teste-de-einstein/

Este foi feito por Einstein, e ele disse q somente 2% da populacao conseguiria chegar ate seu fim.
Bem, se tenho ou nao tenho QI bom nao sei, porem, eu consegui chegar ate o fim do teste.
Meu trofeu ta aki xD:

http://img523.imageshack.us/my.php?image=xdomgxdot9.jpg

Fikei muito feliz por terminar o teste xD.
Espero que boa parte aki do pessoal do Darkes consiga, pois aki tem mto cranio, gnt phoda de raciocinio, bom, ta ai, uma brinkadeirinha para testar suas cabeçinhas xD. Abraços.