Конференция "Сети" » Непонятки в терминальной сессии [D6]
 
  • ChainikDenis © (09.12.14 15:00) [0]
    Есть простенькая задача. Из удаленной машины в терминальной сессии, регулярно плеваться по UDP пакетом длиной около 1Кб.
    Пакет подготавливается попиксельным чтением картинки с битмапа 64х64.
    Т.е. по сути на удаленной машине изредка рисуется картика на битмапе. Потом попиксельно считывается, заполняется пакет и отплавяется по UDP на определенный IP и порт.

    Идея была в том, что бы запустив прогу и отключившись от удаленки, не закрывая терминальную сессию оставить ее работать. И регулярно посылать пакеты по UDP.

    Работает, посылает. Но считывает с битмапа какую-то хрень. Как только подлючають к удаленному компу - считывает правильно, отклчаюсь - хрень.
    Думаль что из-за того что счтиываю и Image который на форме лежит. Переделал, создаю TBitMap рисую на нем, и считываю - те же грабли.

    Куда копать, помогайте...
  • junglecat © (09.12.14 19:27) [1]
    > создаю TBitMap рисую на нем

    что рисуешь и как?
  • ChainikDenis © (10.12.14 11:41) [2]
    Рисую так:

        Screen1.Canvas.Font.Name := 'Tahoma';
        Screen1.Canvas.Font.Size :=7;
        Screen1.Canvas.Font.Color := clBlack;
        Screen1.Canvas.TextOut(0,0,'Винни Пух');
        Screen1.Canvas.TextOut(0,10,'Пятачек');
        Screen1.Canvas.TextOut(0,20,'Сова');
        Screen1.Canvas.TextOut(0,30,'Кролик');
        Screen1.Canvas.TextOut(0,40,'Кристофер');
        Screen1.Canvas.TextOut(0,50,'Осел');

    Считываю так:

        for i := 0 to 63 do
          begin
          for j := 0 to 7 do
            begin
            S := 0;
            for k := 0 to 7 do if Form20.Image2.Canvas.Pixels[j*8+k,i] = clBlack then S := S or ($01 shl k);
            TxD[i*8+j] := S; - тут на самом деле не так
            end;
          end;

    Отправляю так:

        IdUDPServer1.SendBuffer(IP, port, TxD[0], 512);
  • junglecat © (10.12.14 11:47) [3]
    > Рисую так:
    >
    >    Screen1

    не понял... рисуешь на Screen1, а считываешь из Form20.Image2.Canvas?

    в любом случае, при завершении терминальной сессии все канвасы будут недействительными.
    нужно оперировать битмапом в памяти, без всяких TImage
  • ChainikDenis © (11.12.14 15:23) [4]
    Извиняюсь - скопировал не оттуда.

    Считываю конечно же из Screen1.Canvas

    Собсвенно его же и создаю при создании формы:

        Screen1 := TBitmap.Create;
        Screen1.Width := 64;
        Screen1.Height := 64;

    Может туплю? Как на битмапе рисовать без канвы?
  • brother © (11.12.14 15:26) [5]
    имхо при отключении от сессии контекст рабочего стола не валиден...
  • ChainikDenis © (11.12.14 16:11) [6]
    Мой Screen1-то динамически создается. В памяти сидит. С него считывается даже что-то. Только мусор какой-то..
    Я на него даже часы с секундами выводил и каждую секунду обновлял - в поле секунд мусор каждую секунду меняется...
  • junglecat © (11.12.14 16:15) [7]
    здесь нужно что-то рисующее прямо в памяти без канвасов, потому как даже bitmap.canvas создает совместимый контекст в памяти, но без десктопной сессии он будет невалиден
 
Конференция "Сети" » Непонятки в терминальной сессии [D6]
Есть новые Нет новых   [134427   +34][b:0][p:0]