1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Динамическая картинка в форме

Тема в разделе 'Delphi', создана пользователем =Akke=, 31 янв 2015.

  1. TopicStarter Overlay

    =Akke= Пользователи

    Сообщения:
    6
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Добрый вечер товарищи, по скольку только изучаю все это дело, то возник такой вопрос:

    В общем необходимо вывести полосочку Хп из клиента руоффа на форму моей программки.
    Конечно же главное чтоб она прыгала по длине в зависимости от количества хп перса

    Оффсеты нашел:
    +0504 - максимальное количество ХП
    +04B8 - Текущее количество ХП


    Собственно вопрос то такой, как это реализовать?? я примерно понимаю что должно быть, но не знаю как это реализовать. Заранее спасибо
  2. SomePerson Программист Old school Пользователи

    Сообщения:
    227
    Лайки:
    123
    Пол:
    Мужской
    Репутация:
    3
    Тебе не по адресу...
    Хотя может Алекс заглянет в эту тему, и подскажет что нибудь
  3. int 3 Программист Пользователи Open Source Contributor

    Сообщения:
    342
    Лайки:
    531
    Пол:
    Мужской
    Репутация:
    10
    Страна:
    Russian Federation Russian Federation
    Самое банальное - ProgressBar. Если в наличии только оффсеты, достаточно считывать хп 2-3 раза в секунду и обновлять бар.
    Тыщ нравится это.
  4. Ацкой Nyan of Steel Группа анонимных алкоголиков Art Old school Пользователи

    Сообщения:
    403
    Лайки:
    480
    Пол:
    Мужской
    Репутация:
    4
    Команда:
    DeBalance Art Team
    Страна:
    Russian Federation Russian Federation
    Как выше сказано - прогрессбар.
    Для извращенцев - обновлением длины timage можно сделать ;[
  5. TopicStarter Overlay

    =Akke= Пользователи

    Сообщения:
    6
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    буду пробывать, спасибо!
    Буду благодарен, если натолкнешь еще на мыслю, как сделать обновление данных из
    клиента, т.Е программка их хватает, но при их изменении не реагирует.
    Я думал, что можно цыклом сделать таким

    если макс.Хп >= хп.текущ
    тогда
    (тут функции получения переменных)
    слип 2


    но не сработало или я криво сделал
  6. int 3 Программист Пользователи Open Source Contributor

    Сообщения:
    342
    Лайки:
    531
    Пол:
    Мужской
    Репутация:
    10
    Страна:
    Russian Federation Russian Federation
    For, Do..While/Until, While - выбирай. Дельфи не знаю, но циклы - они везде циклы
    P.S. Как говорил один знакомый
  7. Ацкой Nyan of Steel Группа анонимных алкоголиков Art Old school Пользователи

    Сообщения:
    403
    Лайки:
    480
    Пол:
    Мужской
    Репутация:
    4
    Команда:
    DeBalance Art Team
    Страна:
    Russian Federation Russian Federation
    Эмм, а по таймеру не легче отслеживать?
  8. JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    945
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    Сейчас спровоцирую толпу сообщений "некропоооостер", но тем не менее.

    Отрисовкой можно управлять вручную, используя TCanvas нужного компонента: TForm, TPanel, да чего угодно, где он есть.
    Код:
    procedure DrawProgressGauge(CurrentValue, MaxValue: Integer; TargetCanvas: TCanvas);
    const
      RECT_LEFT = 0;
      RECT_TOP = 0;
      RECT_WIDTH = 200;
      RECT_HEIGHT = 16;
      FILLED_COLOR = clGreen;
      UNFILLED_COLOR = clGrey;
    var
      ProgressRect: TRect;
      FilledPart:   Integer; //Заполненная часть полоски
      UnfilledPart: Integer; //Незаполненная часть полоски
    begin
      //Рассчитываем ширину закрашенной и незакрашенной частей
      FilledPart := Round(RECT_WIDTH * (CurrentValue / MaxValue));
      UnfilledPart := RECT_WIDTH -FilledPart;
    
      //Создаём прямоугольник и закрашиваем его цветом завершённого прогресса
      //Функция Bounds принимает параметры: Левый край, верхний край, ширина прямоугольника, высота прямоугольника
      ProgressRect := Bounds(RECT_LEFT, RECT_TOP, FilledPart, RECT_HEIGHT);
      TargetCanvas.Brush.Color := FILLED_COLOR;
      TargetCanvas.FillRect(ProgressRect);
    
      //То же самое, только теперь отступ слева идёт от конца завершенного прогресса
      ProgressRect := Bounds(RECT_LEFT+FilledPart, RECT_TOP, UnfilledPart, RECT_HEIGHT);
      TargetCanvas.Brush.Color := UNFILLED_COLOR;
      TargetCanvas.FillRect(ProgressRect);
    end;
    
    А так же можно воспользоваться компонентом TGauge, у которого в DesignTime можно настраивать цвета и отображение процентов.
    Donato Ferrante нравится это.
Черновик сохранён Черновик удалён

Поделиться этой страницей