Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.11.2008, 01:06
Deiv Deiv вне форума
Прохожий
 
Регистрация: 09.11.2008
Адрес: в Городе Ла Пас - Боливии (Юг Америка) Я говорю немножко русскый язык, мой родной язык - испанский
Сообщения: 2
Репутация: 10
Стрелка Движение с Миганиями?

Здравствуйте, это мой первый post в Форуме, привет, я из Боливии - Юг Америка.
У следующего кода есть эффект рисования текста в движении на любом объекте TForm; этот функционирует верно, но если я ввожу TImage фона (background) TForm, Delphi показывает мне ошибку на этой линии:
Border: = BorderWidth + 3;
ERROR
raised exception EAccess Violation

Код:
PaintTo (Bitmap. Canvas, Left, Top);//Draw the border
=> Border: = BorderWidth + 3;
       BitBlt (Bitmap. Canvas. Handle, Left + Border, Top + Border, Width - Border * 2, Height - Border * 2, Canvas. Handle, Left + Border, Top + Border, SRCCOPY);//and the content 
Как решать это ERROR?

.
Код:
unit MIMOuse;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Step: Double=0;
  Bitmap: TBitmap;
  Circle: array [0..255] of TPoint;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Interval := 33;
 Bitmap := TBitmap.Create;
 Bitmap.Width := ClientWidth;
 Bitmap.Height := ClientHeight;
 Bitmap.Canvas.Brush.Color := Color;
 Caption:= 'The New custom Cursor ';
end;

procedure TForm1.FormPaint(Sender: TObject);
var DestDC: Cardinal;
begin
 DestDC := GetWindowDC(Handle);
 BitBlt(DestDC, ClientOrigin.X - Left, ClientOrigin.Y - Top, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
 ReleaseDC(Handle, DestDC);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 Size: Double;
 Value: TPoint;
 Index, Border: Integer;
begin
 Size := 360 / Length(Caption);
 with Bitmap.Canvas do
  begin
   FillRect(Classes.Rect(0, 0, Bitmap.Width, Bitmap.Height));
   for Index := 0 to ControlCount - 1 do
    with TWinControl(Controls[Index]) do
     if Visible then
      begin
       Repaint;
       PaintTo(Bitmap.Canvas, Left, Top); // Draw the border
       Border := BorderWidth + 3;
       BitBlt(Bitmap.Canvas.Handle, Left + Border, Top + Border, Width - Border * 2, Height - Border * 2, Canvas.Handle, Left + Border, Top + Border, SRCCOPY); // and the content
      end;
   SetBkMode(Handle, TRANSPARENT);
   for Index := 1 to Length(Caption) do
   begin
    with Circle[Index] do
     begin
      if Index < 1 then
        Value := Circle[Index - 1]
      else
        Value := ScreenToClient(Mouse.CursorPos);
      Inc(X, Round((Value.X - X) * 0.6));
      Inc(Y, Round((Value.Y - Y) * 0.6));
      TextOut(X + Round(66 * Cos(Step + Index * Size * (Pi / 180))),
              Y + Round(66 * Sin(Step + Index * Size * (Pi / 180))),
              Caption[Index]);
     end;
    end;
  end;
 FormPaint(nil);
 Step := Step - 0.06;
end;
end.
Как Новичок я попытался решить таким образом:
Я разместил TPanel такую (собственность Align=AllClient) как фон TForm'a и этот в свою очередь содержит TImage (собственность Align=AllClient; stretch=true), эффект работает нормально но медленнo, и у него есть проблема с перекрашенным, а именно очевидно много МИГАНИЕ, и медленнo.
Mне нужно в том, чтобы разместить в этом коде TImage как фон в TForm и также мне нужно, чтобы оно функционировало без миганий, Как?
Как решать и предотвращать это Мигание после того, когда повторно рисовано?
Как решать это без миганий?
Мигание, Мигание.......


The following code has a effect to redraw a text in movement on any object of the TForm; this it works perfectly, but if I introduce a TImage in background TForm's, Delphi shows me an error in this line:
Border: = BorderWidth + 3
ERROR
raised exception EAccess Violation
As Beginner I have tried to solve this way:
I have placed a TPanel (property Align=AllClient) as background of the Form and east in turn contains the TImage (property Align=AllClient; stretch= true), the one effect works normal but slowly, and it has a problem with the one repainted, that is to say a lot of TWINKLING (BLINKKINGS) and slowly.
I need to place in this code a background TImage in the TForm and I need that it works without twinklings, How?
How to solve and without blinkings to the redraw, please?

Последний раз редактировалось Deiv, 10.11.2008 в 01:43.
Ответить с цитированием
  #2  
Старый 10.11.2008, 05:23
Амон Амон вне форума
Прохожий
 
Регистрация: 09.11.2008
Сообщения: 14
Репутация: 10
По умолчанию

Боюсь вас огорчить, но насколько мне известно при использовании для вывода графики TBitmap нельзя полностью избавиться от мигания. Есть способы сделать его менее заметным, но оно всё равно будет бросаться в глаза.
Для создания анимации/движения без миганий надо использовать DirectX или OpenGL, в любом виде (напрямую, или через наборы компонентов).
Ответить с цитированием
  #3  
Старый 10.11.2008, 21:16
Deiv Deiv вне форума
Прохожий
 
Регистрация: 09.11.2008
Адрес: в Городе Ла Пас - Боливии (Юг Америка) Я говорю немножко русскый язык, мой родной язык - испанский
Сообщения: 2
Репутация: 10
По умолчанию

Пример пожалуйста: нарисованный на компонентах с DirectX или OpenGL??
Ответить с цитированием
  #4  
Старый 11.11.2008, 12:32
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
Стрелка

http://www.delphisources.ru/pages/fa...hix_part8.html
Игра написссаная на DelphiX. Не мерцает для работы надо скачивать соответствующие компопоненты...
И вобще надо лазить в FAQ там это и многое полезное написнно!
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #5  
Старый 11.11.2008, 12:56
Аватар для :S.p.a.m.
:S.p.a.m. :S.p.a.m. вне форума
Активный
 
Регистрация: 04.05.2008
Сообщения: 260
Репутация: 15
По умолчанию

Кстати говоря DelphiX очень прост в изучении. Если нужно вот парочка статей - самый минимум (установка компонента, загрузка и вывод спрайтов). Очень толково и понятно. Там же его (компонент) можно скачать.

Ну и попробуйте при создании формы написать Form1.DoubleBuffered:=true. или если все происходит на панели напишите вместо Form1 - panel1. Это позволит уменьшить маргание, точнее его можно сказать даже не будет, но будет немного анимация дергаться. Вобщем попробуйте и поглядите.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter