Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2008, 15:07   #21
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Мутабор спасибо! Теперь компилится . А как сделать чтобы действовал эффект только туда, где Я провожу мышкой. Я делаю так, но не работает:
Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

  var
  f,g:integer;
  begin
  f:=mouse.CursorPos.X;
  g:=mouse.CursorPos.Y;
if PressLM=true then
begin
AntiAliasRect(image1.Picture.Bitmap,f,g,80,80);
image1.Repaint;
end
else
showmessage('fdsffs');
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
c,d:integer;
  begin
if PressLM=true then
begin
c:=mouse.CursorPos.X;
d:=mouse.CursorPos.Y;
AntiAliasRect(image1.Picture.Bitmap,c,d,80,80);
image1.Repaint;
end
else
showmessage('fs');
Почему?
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 15.03.2008, 18:34   #22
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

  var

  f,g:integer;  // Зачем они нужны когде есть "X, Y: Integer" ?
  begin


  f:=mouse.CursorPos.X; // Пустая трата времени...
  g:=mouse.CursorPos.Y; // смотри выше...

// я понял откуда этот кусочек....  : )
// Ты ево применил неправильно... Всё что с низу - бред.
if PressLM=true then  
begin
AntiAliasRect(image1.Picture.Bitmap,f,g,80,80);
image1.Repaint;
end
else
showmessage('fdsffs');
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var

// Тоже замечание с переменными.
c,d:integer;
  begin
// Вот этот кусок уже размещён правильно...
if PressLM=true then // PressLM - переменная типа Boolean. Она отслеживает нажатие на кнопку..
begin
c:=mouse.CursorPos.X; // Говорил уже..
d:=mouse.CursorPos.Y; // смотри выше.
AntiAliasRect(image1.Picture.Bitmap,c,d,80,80);
image1.Repaint;
end
else
showmessage('fs');
Чтобы всё заработало надо писать примерно так:

Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;   
  Shift: TShiftState; X, Y: Integer);     
Begin    
PressLM := True;  
end;   
  
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,   
  Y: Integer);   
Begin  
if PressLM = True then  
   Begin     
      AntiAliasRect(image1.Picture.Bitmap, x, y, 80, 80);   
      image1.Repaint;   
   End;
End;
Незабудь обьявить переменую PressLM.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 15.03.2008, 20:17   #23
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Карась огромное спасибо за подробный ответ! Но вот в чем проблема, Я делаю как Вы говорите, "смяГчает" только не там куда Я жму мышкой! Почему? Эффект делается выше и левее!
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 15.03.2008, 20:29   #24
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

За это отвечает строка:
AntiAliasRect(image1.Picture.Bitmap , x, y, 80, 80);

А точнее там где указываются координаты.

У любого (наверное) курсора есть "горячая точка".. это тот пиксель который даётся как координата (x, y).

Так вот к чему я это всё... Надо правильно указать эти координаты...

Например:
AntiAliasRect(image1.Picture.Bitmap , x - 20, y - 20, x + 20 , y + 20);

Вот теперь есть небольшой кусочек для обработки.... Центром которого является позиция курсор x, y.....

Тут достаточно понять как правильно задать координаты...
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 16.03.2008, 18:10   #25
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Пример растягивания прямоугольника (как для выделения) для применения на нем эффектов.
На форме один PaintBox, лучше сдвинуть его в верхний левый угол, чтобы за края формы не вылез. Его размеры задаются в коде.
Код:
//тип для инструментов, чтобы определять какой инструмент выбран
TCurrentTool = (ctNone, ctAntiAlias {etc});

var
  Form1: TForm1;
  Buffer, Fon: TBitmap; //битмап фон и буфер
  CurrentTool: TCurrentTool;
  tx, ty: integer; //координаты начальной точки
  nx, ny: integer; //размеры прямоугольника по осям x и y

implementation

{$R *.DFM}

//функция для инверта цвета точки
function Invert(tc: TColor): TColor;
var
r,g,b: byte;
pr: integer;
begin
pr:=tc mod 65536;
b:=tc div 65536;
g:=pr div 256;
r:=pr mod 256;
r:=not r;
g:=not g;
b:=not b;
result:=RGB(r,g,b);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Buffer:=TBitmap.Create;
Buffer.Width:=400;
Buffer.Height:=300;

Fon:=TBitmap.Create;
Fon.LoadFromFile('1.bmp'); //файл 1.bmp должен быть 300х400, а то не влезет
Buffer.Canvas.Draw(0,0,Fon);

PaintBox1.Width:=400;
PaintBox1.Height:=300;

CurrentTool:=ctAntiAlias; //выбираем инструмент Анти Алиас
end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
tx:=x;
ty:=y;
nx:=0;
ny:=0;
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var i: integer;
begin
if Shift = [ssLeft] then
  if CurrentTool = ctAntiAlias then
    begin
    Buffer.Canvas.Draw(0,0,Fon);
    nx:=x-tx;
    ny:=y-ty;
    if (nx > 0) and (ny > 0) then
      begin
      for i:=0 to nx div 2 do
        begin
        Buffer.Canvas.Pixels[tx+i*2,ty]:=Invert(Fon.Canvas.Pixels[tx+i*2,ty]);
        Buffer.Canvas.Pixels[tx+i*2,y]:=Invert(Fon.Canvas.Pixels[tx+i*2,y]);
        end;
      for i:=0 to ny div 2 do
        begin
        Buffer.Canvas.Pixels[tx,ty+i*2]:=Invert(Fon.Canvas.Pixels[tx,ty+i*2]);
        Buffer.Canvas.Pixels[x,ty+i*2]:=Invert(Fon.Canvas.Pixels[x,ty+i*2]);
        end;
      end;
    PaintBox1.Canvas.Draw(0,0,Buffer);
    end;
end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (nx > 0) and (ny > 0) then
  begin
  ShowMessage('Параметры для AntiAlias (' +
    IntToStr(tx) + ', ' + IntToStr(ty) + ', ' +
    IntToStr(tx+nx) + ', ' + IntToStr(ty+ny) + ')' + Chr(13) +
    'Размеры: ' + IntToStr(nx) + ' x ' + IntToStr(ny));
  AntiAliasRect(Fon, tx, ty, tx+nx, ty+ny);
  PaintBox1.Canvas.Draw(0,0,Fon);
  end;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
PaintBox1.Canvas.Draw(0,0,Buffer);
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.03.2008, 13:23   #26
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Блин глюки форума надоели...уже сколько зайти немоГ! А куда засовывать TCurrentTool = (ctNone, ctAntiAlias {etc}); Пробую вписать после
type
TForm1 = class(TForm)
но пишется что ожидалось ":" Ставлю ":" пишет что ожидалось an identifer! Может Я не туда засовываю?
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 22.03.2008, 23:12   #27
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Там где оно есть там и оставляй, то есть перед const если он у тебя есть и перед var, после описания типа формы (после end).
Если вставить вперёд type, можно всунуть и в другое место, но в любом случае перед объявлением переменной CurrentTool.
Цитата:
Структура программы

Заголовок программы program <имя программы>;
Директивы компилятора {$<директивы>}

Подключение модулей uses <имя>, ..., <имя>;

Программный блок
Константы const ...;
Типы данных type ...;
Переменные var ...;
Процедуры procedure <имя>; begin ... end;
Функции function <имя>; begin ... end;
Тело программы begin
<операторы>
end.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 22.03.2008 в 23:18.
mutabor вне форума Ответить с цитированием
Старый 23.03.2008, 19:16   #28
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Чето Я не понял? Можете привести листинГ вашей проги. А то пытаюсь, пытаюсь и фиГ!
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 23.03.2008, 19:31   #29
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Всмысле это?

Код:
type
  TCurrentTool = (ctNone, ctAntiAlias);
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 23.03.2008, 19:45   #30
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Вот вот, оно самое, можно и туда.

Еще причина неработоспособности может быть в "неактивных" обработчиках у PaintBox, если просто скопировать процедуры обработчики код может компилироваться, но работать не будет.
Нужно на вкладке Events у PaintBoxa пощелкать на нужных.

Третья причина - нет файла 1.bmp в директории с программой.

Ну и Antialias нужно подключить само собой, на тот момент как я выложил код, с этим уже вроде проблем не было
Вложения
Тип файла: rar frame_sample.rar (152.6 Кб, 12 просмотров)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 23.03.2008 в 22:39.
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовые эффекты. Поделитесь опытом! nikolai_P Microsoft Office Excel 8 23.05.2008 14:48
Эффекты картинок Andrey1433 PHP 1 17.03.2008 02:07
Визуальные эффекты... ~N@um~ Помощь студентам 2 11.12.2007 11:15
2d эффекты в игре. Как реализовать на Delphi? t3ns0r Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.08.2007 18:57