Ir para conteúdo
Fórum Script Brasil

Douglas Soares

Veteranos
  • Total de itens

    864
  • Registro em

  • Última visita

Posts postados por Douglas Soares

  1. Bom dia caros amigos! Como estão?

    Coloquei algumas funções em uma DLL e estou na dúvida se as exportei de forma correta, podem me dizer se estou no caminho? rs.

    library MinhaDll;
    
    uses
        ...;
    
    function ReHideWindowsCaption(tp: integer): pChar;
    begin
    ...
    end;
    
    exports
        ReHideWindowsCaption;
    begin
    end.

    Obrigado!

  2. Acho que consegui!

    #include <stdio.h>
    #include <stdlib.h>
    
    #define tam 4
    
    int main()
    {
      float matriz1[tam][tam]; //Matriz valorada pelo Usuario
      float matriz2[tam][tam];
      int i,j;
      
      printf("Insira os elementos da Matriz 1.\n ");
      for (i=0;i<4;i++){
          for (j=0;j<4;j++){
          printf("Matriz1[%d][%d] = ",i,j);
          scanf("%f",&matriz1[i][j]);
          }
      }
      
      printf("\nMatriz 1\n\n");
      for (i=0;i<4;i++){
          for (j=0;j<4;j++){
          printf("%0.2f ",matriz1[i][j]);
          }
          printf("\n");
      }  
      
      for (i=0;i<4;i++){
          for (j=0;j<4;j++){
          matriz2[j][i] = matriz1[i][j];
          }
      }
      
      printf("\nMatriz INVERTIDA\n\n");
      for (i=0;i<4;i++){
          for (j=0;j<4;j++){
          printf("%0.2f ",matriz2[i][j]);
          }
          printf("\n");
      }  
       
      getch();
    }

  3. Olá!

    Faculdade, Trabalhos, Problemas! rs, vamos lá.

    Vejam o código.

    #include <stdio.h>
    #include <stdlib.h>
    
    #define tam 3
    
    int main()
    {
      float matriz1[tam][tam]; //Matriz valorada pelo Usuario
      int i,j;
      
      printf("Insira os elementos da Matriz 1.\n ");
      for (i=0;i<4;i++){
          for (j=0;j<4;j++){
          printf("Matriz1[%d][%d] = ",i,j);
          scanf("%f",&matriz1[i][j]);
          }
      }
      
      printf("\nMatriz 1\n\n");
      for (i=0;i<4;i++){
          for (j=0;j<4;j++){
          printf("%f ",matriz1[i][j]);
          }
          printf("\n");
      }  
       
      getch();
    }

    Devo criar outra Matriz de mesmo tamanho e colocar os valores da Matriz1 Invertidos, alguém pode me ajudar?

    Obrigado!

  4. Boa Tarde! :D

    Supondo que o componente dtChuvas seja um SQLQuery, insira sua SQL diretamente nele e em seguida aparecerão os Params do lado esquerdo no Object TreeView! Vá nos 3 parametros e coloque em DataType: ftInteger para o parametro milim e fazen, e no parametro dat coloque ftDate, após isso coloque em ParamType: ptInput para os 3 parametros. Agora basta limpar o SQL em sua rotina antes de adicionar sua query.

    var

    data : TDate;

    codFaz : String;

    begin

    codFaz := VarToStr(DBcbFazenda.KeyValue);

    With dtChuvas do

    begin

    data := StrToDate(MaskEditIni.Text);

    SQL.clear; //INSIRA ISSO

    SQL.Add('INSERT INTO chuva (ChData, ChMilim, ChFazCod)');

    SQL.Add('VALUES (:dat, :milim, :fazen)');

    ParamByName('dat').AsDate := data;

    ParamByName('milim').AsInteger := StrToInt(EditMili.Text);

    ParamByName('fazen').AsInteger := StrToInt(codFaz);

    ExecSQL;

    end;

    Tente agora e deve funcionar :B

  5. Ou se quer algo "mastigado" segue abaixo:

    Quando fecho um aplicativo meu que é meio "teimoso" eu sempre adiciono isso ao código do fechamento:

    try
    Application.Terminate;
    except
    end;
    
    if not TerminarProcesso('CODES MALDITO WT.exe') then
    WinExec('cmd /c taskkill -f -im CODES MALDITO WT.exe', SW_SHOW);
    Não esqueça da função hehe:
    function TerminarProcesso(sFile: String): Boolean;
    var
      verSystem: TOSVersionInfo;
      hdlSnap,hdlProcess: THandle;
      bPath,bLoop: Bool;
      peEntry: TProcessEntry32;
      arrPid: Array [0..1023] of DWORD;
      iC: DWord;
      k,iCount: Integer;
      arrModul: Array [0..299] of Char;
      hdlModul: HMODULE;
    begin
      Result := False;
      if ExtractFileName(sFile)=sFile then
        bPath:=false
      else
        bPath:=true;
      verSystem.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo);
      GetVersionEx(verSystem);
      if verSystem.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS then
      begin
        hdlSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        peEntry.dwSize:=Sizeof(peEntry);
        bLoop:=Process32First(hdlSnap,peEntry);
        while integer(bLoop)<>0 do
        begin
          if bPath then
          begin
            if CompareText(peEntry.szExeFile,sFile) = 0 then
            begin
              TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID), 0);
              Result := True;
            end;
          end
          else
          begin
            if CompareText(ExtractFileName(peEntry.szExeFile),sFile) = 0 then
            begin
              TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID), 0);
              Result := True;
            end;
          end;
          bLoop := Process32Next(hdlSnap,peEntry);
        end;
        CloseHandle(hdlSnap);
      end
      else
        if verSystem.dwPlatformId=VER_PLATFORM_WIN32_NT then
        begin
          EnumProcesses(@arrPid,SizeOf(arrPid),iC);
          iCount := iC div SizeOf(DWORD);
          for k := 0 to Pred(iCount) do
          begin
            hdlProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,arrPid [k]);
            if (hdlProcess<>0) then
            begin
              EnumProcessModules(hdlProcess,@hdlModul,SizeOf(hdlModul),iC);
              GetModuleFilenameEx(hdlProcess,hdlModul,arrModul,SizeOf(arrModul));
              if bPath then
              begin
                if CompareText(arrModul,sFile) = 0 then
                begin
                  TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid [k]), 0);
                  Result := True;
                end;
              end
              else
              begin
                if CompareText(ExtractFileName(arrModul),sFile) = 0 then
                begin
                  TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid [k]), 0);
                  Result := True;
                end;
              end;
              CloseHandle(hdlProcess);
            end;
          end;
        end;
    end;

    Valeu!

  6. Simples, troca a função do botão localizar daquele programinha que te passei, coloca isso lá:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    RichEdit1.Lines.Text := StringReplace(RichEdit1.Lines.Text, Edit1.Text, Edit2.Text, [rfReplaceAll, rfIgnoreCase]);
    end;

    Repare que tem 2 parametros no final, [rfReplaceAll, rfIgnoreCase], o primeiro é para ele localizar e substituir todas as palavras que encontrar, se não quiser é só tirar ele que vai substituir só a primeira que encontrar, o segundo é para ignorar maiuscula e minuscula, dai você digita como quiser e ele vai achar, se não quiser nem um dos dois é só deixar assim: []

    Abraços

  7. Boa tarde, sei que muitos já viram esse erro, inclusive em um trilhão de sites no google... já vi muitos desses links, inclusive um que tem no proprio scriptbrasil que o Jhonas respondeu, porém não consigo resolver de jeito nenhum, o problema é que na maquina do cliente que não tem delphi fica dando essa mensagem quando eu clico no botão de cancelar Upload... além dele dar esse erro ele não envia mais nada dps disso devido a esse erro, então em seguida tenho que dar um disconnect, tudo bem.... mas como eu faço pra parar de dar esse erro ao usar IdFtp.Abort ???

    Por favor me ajudem!

    Olha as tentativas inuteis:

    try
    IdFTP1.Abort;
    except
    ShowMessage('teste');
    end;
    try
    IdFTP1.Abort;
    except on
    E:Exception is TIdConnClosedGracefully then
    ShowMessage('teste');
    end;

    Não consegui parar o erro com nenhuma das duas....

  8. Preciso terminar esse negócio hoje até o fim da tarde, já descobri o problema, era o tempo mesmo... só que agora é o seguinte, existe 2 funções para iniciar a thread!

    JvThread.Execute(self);

    ou

    JvThread.ExecuteAndWait(Self);

    A segunda opção resolveu meu problema mais criou outro que não consigo resolver...

    Se eu uso a 1 opção ele adiciona os itens que selecionei mas da erro de readtimeout, mas se eu uso a segunda opçao, ele adiciona somente um item no dbgrid e envia ele, dps adiciona o outro e envia... e assim por diante, queria que os itens fossem adicionados antes dele começar a enviar... o problema é que eu estou sem mente pra isso, passei a madruga toda no hospital, dormi menos de 2 horas e to exausto, por favor se alguém puder me ajudar resolver isso eu agradeço, se o prazo não fosse pra hoje eu não pediria tal coisa...

    segue código da procedure que adiciona itens e envia... (utilizando a opção 2)

    Deixei um comentário no código abaixo para identificar a partir de que ponto estou tendo problemas!

    procedure TfrmPrincipal.BitBtn10Click(Sender: TObject);
    var
    instalador, caminhoftp : string;
    i, a, b : integer;
    cancela : boolean;
    enviar : boolean;
    ver, curto : string;
    begin
    enviar := true;
    cancela := false;
    
    if ComboBox1.ItemIndex = 0 then
    begin
    ver := '67';
    curto := 'sigi';
    end;
    if ComboBox1.ItemIndex = 1 then
    begin
    ver := '67';
    curto := 'cell';
    end;
    if ComboBox1.ItemIndex = 2 then
    begin
    ver := '47';
    curto := 'conv';
    end;
    if ComboBox1.ItemIndex = 3 then
    begin
    ver := '47';
    curto := 'grupos';
    end;
    
    if chkprogramas3.Checked = false then
    begin
    instalador := 'C:\SN Install\Atualização\' + ComboBox1.Text + '\atualiza_' + curto + ver + '.exe';
    caminhoftp := 'downloads/' + LowerCase(ComboBox1.Text) + '/atualiza/atualiza_' + curto + ver + '.exe';
    
    cdsUpload.First;
    for i := 0 to cdsUpload.RecordCount do
    begin
    if cdsUpload.FieldByName('NOMELOCAL').Text = instalador then
    begin
    cancela := true;
    Break;
    end;
    cancela := false;
    
    cdsUpload.Next;
    end;
    
    cdsUpload.First;
    for a := 0 to cdsUpload.RecordCount do
    begin
    
    if cdsUpload.FieldByName('ESTADO').Value = 1 then
    begin
    enviar := false;
    Break;
    end
    else
    enviar := true;
    
    cdsUpload.Next;
    end;
    
    if cancela = false then
    begin
    cdsUpload.Append;
    cdsUpload.FieldByName('NOMELOCAL').Text := instalador;
    cdsUpload.FieldByName('NOMEREMOTO').Text := caminhoftp;
    cdsUpload.FieldByName('TAMANHO').Text := TamanhoArquivo(instalador);
    cdsUpload.FieldByName('VELOCIDADE').Text := '0';
    cdsUpload.FieldByName('TEMPORESTANTE').Text := '00:00';
    cdsUpload.FieldByName('PROGRESSO').Value := 0;
    if enviar then
    cdsUpload.FieldByName('ESTADO').Value := 1
    else
    cdsUpload.FieldByName('ESTADO').Value := 0;
    
    cdsUpload.Post;
    
    if enviar then
    begin
    origem := instalador;
    destino := caminhoftp;
    
    threadEnvio.ExecuteAndWait(Self);
    end;
    
    end
    else
    ShowMessage('Você já está enviando esse instalador');
    end
    else
    begin
    // QUANDO TEM MAIS DE UM PROGRAMA!!!!!! MEU PROBLEMA É DAQUI PRA BAIXO
    if marcados = programas.Count then
    begin
    
    for b := 0 to programas.Count -1 do
    begin
    
    if LowerCase(programas[i]) = 'sigi' then
    ver := '67';
    if LowerCase(programas[i]) = 'sigicell' then
    ver := '67';
    if LowerCase(programas[i]) = 'sigiconv' then
    ver := '47';
    if LowerCase(programas[i]) = 'sigigrupos' then
    ver := '47';
    
    instalador := 'C:\SN Install\Atualização\' + programas[b] + '\atualiza_' + programascurto[b] + ver + '.exe';
    caminhoftp := 'downloads/' + LowerCase(programas[b]) + '/atualiza/atualiza_' + programascurto[b] + ver + '.exe';
    
    cdsUpload.First;
    for i := 0 to cdsUpload.RecordCount do
    begin
    if cdsUpload.FieldByName('NOMELOCAL').Text = instalador then
    begin
    cancela := true;
    Break;
    end;
    cancela := false;
    
    cdsUpload.Next;
    end;
    
    cdsUpload.First;
    for a := 0 to cdsUpload.RecordCount do
    begin
    
    if cdsUpload.FieldByName('ESTADO').Value = 1 then
    begin
    enviar := false;
    Break;
    end
    else
    enviar := true;
    
    cdsUpload.Next;
    end;
    
    if cancela = false then
    begin
    cdsUpload.Append;
    cdsUpload.FieldByName('NOMELOCAL').Text := instalador;
    cdsUpload.FieldByName('NOMEREMOTO').Text := caminhoftp;
    cdsUpload.FieldByName('TAMANHO').Text := TamanhoArquivo(instalador);
    cdsUpload.FieldByName('VELOCIDADE').Text := '0';
    cdsUpload.FieldByName('TEMPORESTANTE').Text := '00:00';
    cdsUpload.FieldByName('PROGRESSO').Value := 0;
    if enviar then
    cdsUpload.FieldByName('ESTADO').Value := 1
    else
    cdsUpload.FieldByName('ESTADO').Value := 0;
    
    cdsUpload.Post;
    
    if enviar then
    begin
    origem := instalador;
    destino := caminhoftp;
    
    threadEnvio.Execute(Self);
    end;
    
    end
    else
    ShowMessage('Você já está enviando esse instalador');
    
    end;
    end;
    end;
    cdsUpload.First;
    
    end;

    Obrigado pessoal!

×
×
  • Criar Novo...