Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование Canvas.... нужна помощь!!! 
:(
    Опции темы
txx
Дата 28.7.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



решил более подробно изучить графические возможности делфи ... объясните кто-нибудь в чём разница если я рисую просто на ... .canvas  или же обращаюсь к ней через ... .pictures.BitMap.canvas  ...читал несколько статей, где мельком показывалась разница между этими способами, но всё это как-то очень "размыто" и не совсем ясно ... объясните, пжалста, русскими словами и в общих чертах если можно smile) 
.... заранее пасиб. 
PM MAIL   Вверх
Alexeis
Дата 28.7.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



canvas - объект связаный с некоторым устройством, при помощи контекста (DC), работа с любым контекстом с позиции програмирования одинакова, однако результат действия завит от устройства с которым связан контекст. Если это контекст принтера, то изображение выведится на принтер, если контекст окна, то нарисуется на окне. С битмапом связан особый контекст, контекст памяти, который позволяет рисовать на невидимой облости расположенной в памяти. При этом изображение из битмапа, можно копировать куда угодно. Но битмап кроме всего прочего позволяет рисовать на свойе поверхности даже без контекста - напрямую записывая значения цветов в память.  Что касается Image1.picture.BitMap.canvas, то рисование на этом канвасе ни чем ни отличается от рисования на TBitmap с одной лишь разницей, что объект TImage выводит автоматически изображения на свою видимою поверхность, что избавляет програмиста от написания кода обновления изображения например при затирании изображения другим окном. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
demon13
Дата 15.8.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
i, p: integer;
begin
 p:= Random(1023);

 Application.ProcessMessages;

 for i:=0 to 763 do
 begin
  if z=1 then
   Break;

  Form1.Canvas.Font.Name:='RomanS';
  Form1.Canvas.Font.Color:=clGreen;
  Form1.Canvas.Font.Height:=32;
  Form1.Canvas.TextOut(p,i,'A');
  Sleep(5);
 end
end;


у меня несколько таймеров выполняют эту процедуру, но падает только одна буква остальные стоят на месте что можно зделать чтобы остальные буквы тоже двигались smile 
PM MAIL   Вверх
Alexeis
Дата 15.8.2006, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата

но падает только одна буква остальные стоят на месте

так выводится же только одна буква
Form1.Canvas.TextOut(p,i,'A');

Добавлено @ 19:46 
чтоб остальные двигались надо выводить все smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
demon13
Дата 15.8.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Шесть таймеров выполняют эту прцидуру и прорисовываются все шесть букв а двигается одна

Это сообщение отредактировал(а) demon13 - 15.8.2006, 23:31
PM MAIL   Вверх
Alexeis
Дата 15.8.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Чет кроме буквы "а" ничего не выводится smile 
Везде
Код

 Form1.Canvas.TextOut(p,i,'A');

где вывод других букв, 
Таймеров то 6, но выводят они все одно и тоже
Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
i, p: integer;
begin
 p:= Random(1023);

 Form1.Canvas.Font.Name:='RomanS';
 Form1.Canvas.Font.Color:=clGreen;
 Form1.Canvas.Font.Height:=15;
 Form1.Canvas.TextOut(p,0,'A');

 for i:=0 to 763 do
 begin
  if z=1 then
   Break;

  Application.ProcessMessages;
  Form1.Canvas.Font.Name:='RomanS';
  Form1.Canvas.Font.Color:=clGreen;
  Form1.Canvas.Font.Height:=32;
  Form1.Canvas.TextOut(p,i,'A');
  Sleep(5);
 end
end;

Не ужели нужно выводить 6 букв "a"???


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
demon13
Дата 15.8.2006, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Тот код уже не актуален

Добавлено @ 23:34 
Эту идею я взял с matrix

Это сообщение отредактировал(а) demon13 - 17.8.2006, 01:37
PM MAIL   Вверх
Alexeis
Дата 16.8.2006, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Я тут по быстрому свою матрицу накидал smile 
но уж забыл как там точно было.
Код

unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  ch  : array[1..40, 1..40] of Char;

  p : Integer = 40;
  h : Integer;
  w : Integer;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i, j, hi, wi : Integer;
begin
  PatBlt(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, BLACKNESS);

  hi := 10;
  wi := 10;

  for i := 1 to 40
  do
    Begin
      if p = 0
      then
        p := 40;

      hi := 10;

      for j := p to 40
      do
        begin
          Canvas.TextOut(wi, hi, ch[i, j]);
          hi := hi + h;
        end;

      for j := 1 to p-1
      do
        begin
          Canvas.TextOut(wi, hi, ch[i, j]);
          hi := hi + h;
        end;

      wi := wi + w;
    end;

  Dec(p);
end;



procedure TForm1.FormCreate(Sender: TObject);
var
  i, j : Integer;

begin
   Randomize;

   for i := 1 to 40
   do
     for j := 1 to 40
     do
       ch[i, j] :=Chr(Ord('a') + Random(25));


  Font.Name := 'comic sans ms';
  Font.Color := $008000;
  Font.Style := [fsBold];
  Font.Size := 10;

  Canvas.Font.Name := 'comic sans ms';
  Canvas.Font.Color := $008000;
  Canvas.Font.Style := [fsBold];
  Canvas.Font.Size := 10;

   Form1.Color := clBlack;

   h := Canvas.TextHeight('A');
   w := Canvas.TextWidth(' A ');


   DoubleBuffered := True;
   DoubleBuffered := True;
end;

end.



Это сообщение отредактировал(а) alexeis1 - 16.8.2006, 01:00


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
demon13
  Дата 16.8.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Зделано круто не спорю smile 

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  disk1EXE 66,00 Kb
PM MAIL   Вверх
demon13
Дата 16.8.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



 smile Но думаю лучше не просто буквы, а двоичный код

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  disk1gsd 49,00 Kb
PM MAIL   Вверх
demon13
Дата 16.8.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Скачиваете эти файлы в одну папку, переименовываете их и запускаете disk1.EXE smile   весь исходный код написан alexeis1 большое ему спасибо

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  disk2gsd 103,86 Kb
PM MAIL   Вверх
Alexeis
Дата 16.8.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Тут еще явно напрашивается какой нибудь фильтр, для размытия в вертикальном направлении.
И еще нужен выход по движению мышки.
demon13, хорошо бы выложить модифицированный код, а то я вижу количество столбцов сократилось до 25 это зависит от разрешения экрана.  Напрашивается сделать в OpenGl, чтоб сразу и масштаб был автоматическим и скорость. Вообще, если покалдовать, то симпатичненький ScreanSaver выйдет.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
demon13
Дата 16.8.2006, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Столбцов осталось столько же, размер шрифта увеличился.

вот ноый код. Завтра насчет мыши сделаю.

Добавлено @ 23:00 
Ну да заставка прикольная может выйти. Калдовать будем? smile 

Это сообщение отредактировал(а) demon13 - 16.8.2006, 22:51

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  Unit1.pas 1,83 Kb
PM MAIL   Вверх
Alexeis
Дата 17.8.2006, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Только вот бы на оригинал взглянуть, а то я фильм года три назад видел, детали не помню этого эффекта.
Где бы фрагмент скачать?

Это сообщение отредактировал(а) alexeis1 - 17.8.2006, 01:02


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
demon13
Дата 17.8.2006, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



На нашу прогу похоже?

Добавлено @ 01:01 
Я сейчас качаю какойто фрагмент matrix, скачаю, скажу то или нет.

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  is.jpeg 3,29 Kb
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.