[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Code:
    winexec(PChar('cmd /c "c:\Program Files\Mozilla Firefox\firefox.exe" http://rambler.ru/'),SW_Hide);
    Тестировал сейчас, все нормально работает :) (через командную строку открывает)
     
    #4081 wolmer, 4 Sep 2009
    Last edited: 4 Sep 2009
  2. Ixidor

    Ixidor New Member

    Joined:
    3 Jun 2009
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Все это очень странно. У меня окно все так же видно как и функцией shellExecute=((( А у тебя оно точно невидимо было?
     
  3. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Что значит обычным? Я этого не понимаю
     
  4. Ixidor

    Ixidor New Member

    Joined:
    3 Jun 2009
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    параметр SW_HIDE отвечает за невидимость окна. Однако окно, почему-то, невидимым не получается. И это происходит именно при открытии определенного сайта браузером. Например, при открытии текстого документа блокнотом так окно сделать невидимым получалось...
     
  5. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Какую ф-цию используешь? Как хендл ищеш? По заголовку? И вообще, какое именно окно ты пытаешся скрыть? Опиши подробней.
     
    #4085 =Zeus=, 4 Sep 2009
    Last edited: 4 Sep 2009
  6. Ixidor

    Ixidor New Member

    Joined:
    3 Jun 2009
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Вот описание проблемы. Я хочу сделать окно сразу невидимым(при открытии). Использую функцию ShellExecute
     
  7. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    wolmer, а такой код не работает?
    Code:
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if gdSelected in State then
      with StringGrid1.Canvas do
      begin
        Font.Color := clBlack;
        Brush.Color := $0ec2ff;
        FillRect(Rect);
        TextOut(StringGrid1.DefaultColWidth*ACol+3,
          StringGrid1.DefaultRowHeight*ARow+4, StringGrid1.Cells[ACol, ARow]);
      end;
    end;
    
     
    #4087 Nullsleep, 4 Sep 2009
    Last edited: 4 Sep 2009
  8. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    Ixidor, попробуй такой код
    Code:
    const
      cmd = 'C:\Program Files\Mozilla Firefox\Firefox.exe http://rambler.ru';
    var
      start_inf: _STARTUPINFOA;
      proc_inf : _PROCESS_INFORMATION;
    begin
      FillChar(start_inf, SizeOf(start_inf), 0);
      start_inf.cb := SizeOf(start_inf);
      start_inf.dwFlags := STARTF_USESHOWWINDOW;
      start_inf.wShowWindow := SW_HIDE;
      CreateProcess(nil, cmd, nil, nil, True, 0, nil, nil, start_inf, proc_inf);
    end;
    
     
    #4088 Nullsleep, 4 Sep 2009
    Last edited: 4 Sep 2009
  9. Ixidor

    Ixidor New Member

    Joined:
    3 Jun 2009
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Nullsleep, все равно окно видимое=( А у тебя его не видно?
     
  10. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    У меня не видно) Но ты можешь скрыть браузер уже после его запуска.
     
  11. transserg

    transserg Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    147
    Likes Received:
    25
    Reputations:
    2
    Привет всем! нужно сделать кеширование данных в файле в одном файле!!! как лучше арганизовать это? данные будут иконки
     
  12. Ixidor

    Ixidor New Member

    Joined:
    3 Jun 2009
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    NullSleep, какая у тебя ОС и какой браузер?)) Конечно, я могу скрыть браузер после запуска, но это некошерно. Можно ли получить хендл окна уже при запуске и скрыть его одновременно с запуском?
     
  13. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Можно получить хендл когда окно открыто (FindWindow помоему). Можно по заголовку.
     
  14. Ixidor

    Ixidor New Member

    Joined:
    3 Jun 2009
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Не, это я знаю. Я хотел получить хендл одновременно с открытием=)
     
  15. AKYLA

    AKYLA Elder - Старейшина

    Joined:
    29 Nov 2007
    Messages:
    108
    Likes Received:
    35
    Reputations:
    6
    Flenov
    Ну тогда попробуй это:

    Code:
    Function DownloadBFile(P: Pointer): Longint; Stdcall;
    Const
      CrLf: String = #$0d+#$0a;
     Var
      Fn: String;
      F: File;
      GetOut: Boolean;
      WSAData: TWSAData;
      hp: phostent;
      a: tsockaddr;
      IpAddress,Buffer: String;
      Ts,Bs,Br,ContentLength,I: Integer;
      MySock: TSocket;
    Begin
      Fn:=String(P^);
    //  ShowMessage('Attempting To Download File '+Fn);
      WSAStartup($0101, WSAData);
      mysock := socket(AF_INET, SOCK_stream, ipproto_tcp);
      hp := gethostbyname('www.google.com'); //Сайт
      Sleep(40);
        if hp = nil then
          begin
    //        ShowMessage('Could Not Resolve Name...');
            exit;
          end
        else
          begin
            for i := 0 to hp^.h_length - 1 do
              IPAddress:=IpAddress+IntToStr(Ord(Hp.h_addr_list^[i]))+'.';
              SetLength(IPAddress,Length(IPaddress)-1);
            end;
      a.sin_family := AF_INET;
      a.sin_port := htons(80);
      A.sin_addr.S_addr:=inet_addr(Pchar(IpAddress));
      I:=connect(mysock, a, sizeof(a));
      buffer:='GET /test/'+fn+' HTTP/1.0'+CrLF+'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, */*'+CrLF+'Accept-Language: en-au'+CrLF+'Accept-Encoding: gzip, deflate'+CrLF+'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'+CrLF+'Host: '+IpAddress+CrLF+'Cache-Control: no-cache'+CrLf+'Connection: Close'+CrLF+Crlf;
      I:=send(mysock, Buffer[1], Length(buffer), 0);
      Sleep(30);
      System.Assign(F,'c:\image.gif'); // Картинка куда сохранять
      System.Rewrite(F,1);
     ContentLength:=0;
     SetLength(Buffer,5048);
     FillChar(Buffer[1],Sizeof(Buffer),#0);
     BS:=recv(mysock, buffer[1], 5048,0);
     If (BS=Socket_Error) Or (BS=0) Then
       Exit;
     TS:=0;
     BS:=0;
     If (Copy(Buffer,1,15)='HTTP/1.1 200 OK') or (Copy(Buffer,1,15)='HTTP/1.0 200 OK') Then
      Begin
       Delete(Buffer,1,Pos('Content-Length:',Buffer)+15);
       ContentLength:=StrToInt(Copy(Buffer,1,Pos(#$0d+#$0a,Buffer)-1));
       Delete(Buffer,1,pos(#$0d+#$0a+#$0d+#$0a,Buffer)+3);
       Form1.ProgressBar1.Max:=ContentLength div 1024;
       If Trim(Buffer)<>'' Then
        Begin
         TS:=TS+Length(Buffer);
         BlockWrite(F,Buffer[1],Length(Buffer));
         SetLength(Buffer,5048);
        End;
      End
        else
       Exit;
     Repeat
       SetLength(Buffer,5049);
       BS:=recv(mysock, buffer[1], 5048,0);
       TS:=TS+Bs;
       Form1.ProgressBar1.Position:=TS div 1024;
       BlockWrite(F,Buffer[1],BS);
     Until (BS=0) OR (Socket_Error=BS) Or (GetOut=True);
     System.Close(F);
    // Конец закачки;
    End;
    
    procedure TForm1.Button1Click(Sender: TObject);
    Var
     Th: Thandle;
    begin
     F:='mage.gif'; //Картинку которую качать
     CreateThread(Nil,0,@DownloadBFile,@F,0,Th);
    end;
    П.С, Дурак он на то и дурак, что ничего вообще не знает )))
     
    #4095 AKYLA, 4 Sep 2009
    Last edited: 4 Sep 2009
  16. shuba

    shuba Elder - Старейшина

    Joined:
    22 May 2009
    Messages:
    593
    Likes Received:
    129
    Reputations:
    52
    Кароче в школе задали

    В школе задали написать на делфи консольный калькулятор, а мне делфи влом качать, да и комп не потянет((((У меня тетрис

    вот кароче часть кода :D

    Code:
    Begin    writeln('vvedi chislo');  readkn(x.y);  writeln('vvedite deystvie');  readln (d)  if d='+' then z:= x+y
    т.е сделать в общем надо простой калькулятор,но с сюрпризом...
    ф-ции:
    1)чтоб делил, складывал и умножал...больше ниче ненадо
    2)Сюрприз заключаеться в том...чтобы когда кто нить на 0 делил...в консоле писалось ERROR и комп ребутался)))))

    Если не трудно напишите пожалуто...если можно...скомпилируйте))))Буду очень благодарен!
     
  17. Ixidor

    Ixidor New Member

    Joined:
    3 Jun 2009
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Никто не знает, как эмулировать нажатия клавиш в браузерную строку? Хендл окна браузера известен.
     
  18. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    Имхо смотреть надо в сторону SendMessage

    RE: Кароче в школе задали

    Скомпилированный калькулятор и исходники тут . После того как попробуют разделить на 0 сообщаем "Error ...", после чего ждем 2 секунды и shutdown.
     
  19. AKYLA

    AKYLA Elder - Старейшина

    Joined:
    29 Nov 2007
    Messages:
    108
    Likes Received:
    35
    Reputations:
    6
    Ixidor
    Что-то типа такого для фаера

    Code:
    uses ddeman;
     
    function GetURL(Browser: string): string;
    var
     Client_DDE: TDDEClientConv;
     temp: PChar;
    begin
     Result := '';
     Client_DDE:= TDDEClientConv.Create( nil );
     with Client_DDE do
      begin
       SetLink(Browser, 'WWW_GetWindowInfo');
       temp := RequestData('0xFFFFFFFF');
       Result := StrPas(temp);
      // Return only the URL part
       Delete(Result, Pos(',', Result), Length(Result)-Pos(',', Result)+1);
       // Remove quotes
       Delete(Result, 1, 1);
       Delete(Result, Length(Result), 1);
       // ************
       StrDispose(temp);
       CloseLink;
      end;
     Client_DDE.Free;
    end;
     
    procedure SetURL(URL, Browser: String);
    var
      Client_DDE: TDDEClientConv;
    begin
      Client_DDE := TDdeClientConv.Create(nil);
      with Client_DDE do
      begin
        SetLink( Browser, 'WWW_Activate' );
        RequestData('0xFFFFFFFF');
        SetLink( Browser, 'WWW_OpenURL' );
        RequestData(URL  + ',,0xFFFFFFFF,0x3,,,');
        CloseLink;
      end;
      Client_DDE.Free;
    end;
    
    //Вызов
    SetURL('http://forum.sources.ru/','FireFox');
     
  20. UnknownZZZ

    UnknownZZZ New Member

    Joined:
    13 Aug 2009
    Messages:
    9
    Likes Received:
    1
    Reputations:
    0
    у меня такая проблемка,..как изменять свойства обьектов на форме из длл? есть програмка - монитор окон пишет в лог все имена окон, которые открывались и закрывались. На форме есть 2 кнопки, код монитора записан в длл, вот кусок
    Code:
    HCBT_DESTROYWND:      
    begin  GetWindowText(WParam,@WindowName,MAX_PATH);     
    if WindowName='' then exit;      
    NewStr:='Window destoyed at '+GetTime;       NewStr:=NewStr+'. Window name '+WindowName+#13#10;       
    if WindowName='NetSpeakerphone' then //ето условие определяет закрылось ли окно, 
    надо ели закрылось, то спрятать кнопку на форме             
    end;
    
     
    #4100 UnknownZZZ, 6 Sep 2009
    Last edited: 6 Sep 2009
Thread Status:
Not open for further replies.