скриншот рабочего стола, с обновлением

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Leon2009, 14 Jan 2010.

  1. Leon2009

    Leon2009 New Member

    Joined:
    1 Sep 2009
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте можете помочь? делаю скрин рабочего стола.
    Code:
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    bmp: TBitmap;
    DC: HDC;
    Jpg: TJpegImage;
    Begin
    Try
    bmp:= TBitmap.Create;
    Jpg:= TJpegImage.Create;
    bmp.Height:=Screen.Height;
    bmp.Width:=Screen.Width;
    DC:=GetDC(0);
    bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
    DC, 0, 0, SRCCOPY);
    Jpg.Assign(Bmp);
    Jpg.SaveToFile('test.jpg');
    image1.Picture.Assign(Jpg);
    ReleaseDC(0, DC);
    finally
    Bmp.Free;
    jpg.Free;
    [COLOR=DarkOrange]form1.Image1.Picture:=nil;[/COLOR]  не знаю куда ее поставить????
    End;
    end;
    
    все работает но только есть глюк: первый снимак делает хорошо, а остальные начинают уменьшатся. если ставлю nil то вообще ничго не появляется. как делать обновление???? Спасибо!
     
  2. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Они не уменьшаются. Ты подумай: ты делаешь скрин. а потом скрин в котором есть скрин. А потом скрин скрина скрина... и тд. Все вообщем норм, это просто оптическая иллюзия.
     
  3. Leon2009

    Leon2009 New Member

    Joined:
    1 Sep 2009
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    глюк

    и как хоть с ней справлятся? что делать :confused:
    как сделать правельно. чтобы не из скрина скрин делать, а скрин рабочего стола?
    а то видео ни какого не получается :D
    а как канву почистить незнаю. вернее знаю тока незнаю как в код в писать.
    Спасибо!
     
    #3 Leon2009, 15 Jan 2010
    Last edited: 15 Jan 2010
  4. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    да возьми подвигай окном своим во время захвата, увидишь что все норм. на скрине оно тоже двигается.
     
  5. Leon2009

    Leon2009 New Member

    Joined:
    1 Sep 2009
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    подвигал

    подвигал я окном! вылетает табличка, точно не перевел, но в переводчике - "что то там закончилось" :confused:
    ладно потом испралю :rolleyes:

    а как передать через сокеты изображение из server -> Image1 в client -> image1 :confused:
    без сохранение файла.
    Сервер
    Code:
    var
    Size: integer;
    P: ^Byte;
    begin
    MS := TMemoryStream.Create; // Создаём буфер для файла
    MS.LoadFromFile(Edit1.Text); // Загружаем файл в буфер
    // Посылаем информацию о файл (команда # название # размер)
    ServerSocket1.Socket.Connections[0].SendText('file#'+Edit1.Text+'#'+IntToStr(MS.Size)+'#');
    MS.Position := 0; // Переводим каретку в начало файла
    P := MS.Memory; // Загружаем в переменную "P" файл
    Size := ServerSocket1.Socket.Connections[0].SendBuf(P^, MS.Size); // Посылаем файл
    // Выводим прогресс
    ProgressBar1.Position := Size*100 div MS.Size;
    StatusBar1.SimpleText := 'Отправлено '+IntToStr(Size)+' из '+IntToStr(MS.Size)+' байт'
    
    Клиент
    Code:
    procedure TForm1.Writing(Text: string);
    begin
    if MS.Size < Size then // Если принято байт меньше размера файла, то...
    MS.Write(Text[1], Length(Text)); // Записываем в буфер
    // Выводим прогресс закачки файла
    ProgressBar1.Position := MS.Size*100 div Size;
    StatusBar1.SimpleText := 'Принято '+IntToStr(MS.Size)+' из '+IntToStr(Size);
    if MS.Size = Size then // Если файл принят, то...
    begin
    
    Receive := false; // Переводим клиента в нормальный режим
    MS.Position := 0; // Переводим каретку в начало буфера
    MS.SaveToFile(Name); // Сохраняем файл
    image1.Picture.LoadFromFile(name);
    ClientSocket1.Socket.SendText('end'); // Посылаем команду "end", то есть файл принят
    MS.Free; // Убиваем буфер
    StatusBar1.SimpleText := 'Файл принят';
    
    end;
    end;
    
    procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
    Rtext: string; // Принятый текст       
    begin
    Rtext := Socket.ReceiveText;
    if Receive then // Если клиент в режиме приёма файла, то...
    Writing(RText) // Записываем данные в буфер
    else // Если клиент не в режиме приёма файла, то...
    if Copy(Rtext, 0, Pos('#', Rtext) -1) = 'file' then // Если это файл, то...
    begin MS := TMemoryStream.Create; // Создаём буфер для файла
    Delete(Rtext, 1, Pos('#', Rtext)); // Определяем имя файла
    Name := Copy(Rtext, 0, Pos('#', Rtext) -1); // Определяем имя файла
    Delete(Rtext, 1, Pos('#', Rtext)); // Определяем размер файла
    Size := StrToInt(Copy(Rtext, 0, Pos('#', Rtext) -1)); // Определяем размер файла
    Delete(Rtext, 1, Pos('#', Rtext)); // Удаляем последний разделитель
    Label1.Caption := 'Размер файла: '+IntToStr(Size)+' байт'; // Выводим размер файла
    Label2.Caption := 'Имя файла: '+Name; // Выводим имя файла
    Receive := true; // Переводим сервер в режим приёма файла
    Writing(RText); // Записываем данные в буфер
    end;
    
    end;
    
    Спасибо! :)
     
Loading...