Ir para conteúdo
Fórum Script Brasil

s3c

Membros
  • Total de itens

    817
  • Registro em

  • Última visita

Tudo que s3c postou

  1. Verifique se seu banco suporta: Where Upper(Nome) Like '%TIAGO%'
  2. Crie um Mutex no seu .dpr: var hMutex:THandle; begin hMutex := 0; try hMutex := CreateMutex(nil, true, 'Só Chama uma vez'); if GetLastError = ERROR_ALREADY_EXISTS then begin ShowMessage('xxx.exe Já Está em Execução !'); CloseHandle(hMutex); end else begin Application.Initialize; Application.CreateForm(...); Application.Run; end; finally ReleaseMutex(hMutex); end; end.
  3. s3c

    Dúvida Sobre Edit

    Só números no TEdit: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if ((Key < '0') or (Key > '9')) and (Key <> #8) then begin Key := #0; ShowMessage('Caracter Inválido no Edit Numérico !'); end; end; Para deixar só 2 dígitos decimais, acho que assim resolve: f := Trunc(f*100) / 100; // f é o Double
  4. s3c

    Dúvida Sobre Edit

    Acho que o mais fácil seria você utilizar o evento onKeyPress do TEdit.
  5. s3c

    Datas

    Olá colega, tente assim: function Sub_Data(Data:TDateTime; Dias:Integer):TDateTime; begin While SysUtils.DayOfWeek(Data-Dias) in [1,7] do Inc(Dias); Result := Data-Dias; end;
  6. Após montar sua sql: Result2 := 0; qry4.Open; While not qry4.Eof do begin Result2 := Result2 + qry4.FieldByName('Indice_m').asFloat; qry4.Next; end; qry4.Close; E a mesma coisa p/ a outra query.
  7. A propriedade SQL de qry4 é um TStrings e quando você executa a função Add, ela retorna o índice da string adicionada à TStrings o que não tem nada a ver com aquilo que você quer.
  8. s3c

    Duvidas Com Dll

    Olá colega, poste o código do seu .exe referente à carga da dll e a chamada da função.
  9. s3c

    Teclas De Atalho

    Olá Paulo, Funciona porque RegisterHotKey registra a tecla na fila de msgs do Windows. Quando uma tecla é pressionada, o Windows verifica se a tecla casa com as teclas registradas, se sim ele manda uma msg do tipo WM_HotKey p/ a fila de msgs da thread que a registrou, que no caso seria a thread principal do seu aplicativo. É por isso que você tem que definir a procedure de mensagem do tipo WM_HotKey, para pegar a msg enviada pelo Windows. Só falha quando você tenta registrar a mesma tecla mais de uma vez. você pode usar o ShellExecute, ex: uses ShellApi, RegisterHotKey(Handle, 1, MOD_CONTROL, $41); // Ctrl+a RegisterHotKey(Handle, 2, MOD_CONTROL, $58); // Ctrl+x procedure TForm1.WmHotKey(var Msg:TMessage); var Dir:array[0..Max_Path] of Char; sExe:String; begin Case Msg.WParam of 1 : mnuAbrir.Click(mnuAbrir); 2 : begin GetWindowsDirectory(@Dir, Max_Path); sExe := StrPas(Dir)+'\NotePad.exe'; ShellExecute(Handle, 'Open', PChar(sExe), nil, nil, SW_Show); end; end; end;
  10. Olá, tente: DM.QueryConsultaOs.RecordCount
  11. você só quer tirar a barra de título ? Bom, se for isso, BorderStyle := bsNone;
  12. Olá, você já está passando o datamodule p/as dlls ?
  13. Olá Paulo, um TMemoryStream basicamente é um objeto de auxílio, assim como o TList(array de ponteiros), TStrings(array de strings), etc... você não os vê nas guias de componentes, mas eles as vezes estão embutidos nas propriedades de alguns componentes. Um exemplo é a propriedade Rows do TStringGrid que nada mais é que um TStrings; daí você entra no conceito de classes e herança porque Rows herda propriedades, métodos e funções da classe TStrings. Um TMemoryStream é uma classe que trabalha diretamente com a memória e seu conteúdo fica somente em memória durante seu ciclo de vida. Quando você faz: MS := TMemoryStream.Create; você apenas instancia o objeto. Quando você faz: stringgrid1.Rows.SaveToStream(MS); todas as células(strings) daquela linha são salvas em memória e é aí que o TMemoryStream entra com a função de auxílio porque você não se preocupa com alocação de memória; ele já faz isso automaticamente. Quando você faz MS.Free; não somente é liberada a memória da instância do objeto, mas também toda a memória alocada por ele que no caso seriam as células. Viu como ele auxilia; você não se preocupa nem com alocação e nem com liberação de memória porque a própria classe já faz isto. TMemoryStream tb implementa os métodos SaveToFile e LoadFromFile; e aí você consegue salvar e carregar seu stringgrid inteiro. O Delphi poderia ter implementado SaveToFile e LoadFromFile diretamente no stringgrid e você até pode fazer em tempo de compilação stringgrid1.Rows.SaveToFile, mas dará um erro porque Rows exige indexação e com isto você apenas salva aquela linha ou aquela coluna. Se você tiver necessidade de carregar e salvar vários stringgrids é mais fácil você criar sua própria classe herdando de TStringGrid e implementando os métodos SaveToFile e LoadFromFile diretamente na classe herdada; daí você apenas faz: Meu_StringGrid.SaveToFile e Meu_StringGrid.LoadFromFile. Apenas citei o TMemoryStream p/ ver que o Delphi possui objetos de auxílio, mas um código mais prático seria: var i,j:Integer; Arq:TextFile; begin AssignFile(Arq, 'c:\temp\stringgrid1.txt'); Rewrite(Arq); for i := 0 to stringgrid1.ColCount-1 do for j := 0 to stringgrid1.RowCount-1 do Writeln(Arq, stringgrid1.Cells[i,j]); CloseFile(Arq); end; E para carregar, o inverso.
  14. s3c

    Dll No Windows 2000

    Olá colega, experimente colocar o caminho completo da dll.
  15. Olá, fico contente tb. Procure passar adiante p/ aqueles que não conhecem.
  16. Ah, esquecí de dizer que o Reset ativará a condição de eof se o textfile estiver vazio, de modo que ele não passará pelo While.
  17. Olá, é porque o último readln ativa a condição de eof do textfile. Retire todos readln e só deixe um imediatamente após o begin do While.
  18. Olá, bom do jeito que está, acredito que esteja inserindo 44 registros iguais p/ cada linha do arquivo texto por causa do for. Tente assim após tblGabarito.Open: while not Eof ( arq ) do begin tblGabarito.Append; for idx := 1 to 45 do begin if idx < 10 then tblGabarito.FieldByName('LINHA_0' + IntToStr(idx)).AsString := linha[idx] else tblGabarito.FieldByName('LINHA_' + IntToStr(idx)).AsString := linha[idx]; end; tblGabarito.post; ReadLn ( arq, linha ); end; tblGabarito.Close; CloseFile ( arq ); end;
  19. Olha, não tenho certeza mas parece que se você fizer tblGabarito.Append, o Dataset já fica em modo de inserção; depois é só dar tblGabarito.Post
  20. Desculpe-me se disser alguma besteira, pois já faz algum tempo que não mexo c/ programação client/server. 1-tblGabarito.Insert; // só modifica o State do Dataset 2-For idx := 0 to tblGabarito.Fields.Count - 1 // você deve ter 15 cpos na sua tabela e a string linha deve ser indexada a partir de 1 ou linha[idx+1] 3-tblGabarito.Next; // não entendí já que o Dataset está em modo Insert. Acredito que primeiro você deva testar o modo de operação do Dataset: if tblGabarito.State <> dsInsert then tblGabarito.Insert; Depois: tblGabarito.Append ou tblGabarito.Last Depois alimentar os 15 campos do seu registro de inserção. Depois: tblGabarito.Post e não tblGabarito.Next
  21. Olá, eu não entendí direito. Esta tabela tblGabarito já está conectada ao banco de dados? Quais são seus campos?
  22. você pode carregá-lo num TStringList, pesquisar e se for o caso, salvar: var TS:TStringList; begin TS := TStringList.Create; TS.LoadFromFile('c:\xxx\Arquivo.txt'); if Pos('PALAVRA', UpperCase(TS.Text)) > 0 then TS.SaveToFile('c:\yyy\Arquivo.txt'); TS.Free; end;
  23. Olá Paulo, Diretamente creio que não porque Cells[i,j] simplesmente retorna uma string, mas no evento onDrawCell você tem o Rect que é o TRect do Canvas daquela célula mais o ACol e ARow que identificam qual célula está sendo pintada e com isto creio que dê p/ centralizá-la. Na verdade a propriedade Options é um Set de constantes e o correto seria:stringgrid1.Options := stringgrid1.Options + [goEditing]; // Edita stringgrid1.Options := stringgrid1.Options - [goEditing]; // Retira a edição Bom você pode utilizar um TMemoryStream de auxílio: // Para salvar var i:Integer; MS:TMemoryStream; begin MS := TMemoryStream.Create; for i := 0 to stringgrid1.RowCount-1 do stringgrid1.Rows[i].SaveToStream(MS); MS.SaveToFile('c:\temp\stringgrid1.txt'); MS.Free; end; // Para carregar var i,iPos:Integer; MS:TMemoryStream; begin MS := TMemoryStream.Create; MS.LoadFromFile('c:\temp\stringgrid1.txt'); iPos := 0; for i := 0 to stringgrid1.RowCount-1 do begin MS.Position := iPos; stringgrid1.Rows[i].LoadFromStream(MS); Inc(iPos, Length(stringgrid1.Rows[i].Text)); end; MS.Free; end;
  24. s3c

    Teclas De Atalho

    Olá macks, tem a ver sim e você pode controlar através da propriedade Active de TApplication. Na procedure TForm1.WmHotKey(var Msg:TMessage); coloque antes do Case: if not Application.Active then Exit;
  25. s3c

    Teclas De Atalho

    Olá colega, defina: procedure WmHotKey(var Msg:TMessage); message WM_HOTKEY; Depois: procedure TForm1.WmHotKey(var Msg:TMessage); begin Case Msg.WParam of 1 : Button1Click(Button1); end; end; No onCreate e onDestroy: procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Handle, 1, MOD_CONTROL, $4e); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnregisterHotKey(Handle, 1); end; Com isto, mesmo sua aplicação estando fora de foco o Ctrl+N executará o clique do botão porque a tecla de atalho é registrada em todo o Windows. Coloquei um Case no método da mensagem porque você pode registrar várias teclas de atalho.
×
×
  • Criar Novo...