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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2010, 14:42   #11
Danilka
Пользователь
 
Аватар для Danilka
 
Регистрация: 30.03.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Selestis Посмотреть сообщение
Заменить в предыдущем коде в OnMouseMove:
Код:
  if not Draw then exit;
  Refresh;
  with Canvas do begin
    MoveTo(p1.X, p1.Y);
    LineTo((p2.X+p1.X)div 2 , p1.Y);
    LineTo((p2.X+p1.X)div 2 , p2.Y);
    LineTo(p2.X, p2.Y);
    p2:=Point(X,Y);
  end;
то что нужно! только не магу понять почему у меня не получалось

Огромное спасибо!

upd: хотя не совсем то, не сразу заметил что стоит команда "Refresh". а так получается тоже самое что и у меня получалось ранее =(
Никогда и ничего не просите! Никогда и ничего, и в особенности у тех, кто сильнее вас. Сами предложат и сами все дадут! © Булгаков

Последний раз редактировалось Danilka; 11.12.2010 в 16:55.
Danilka вне форума Ответить с цитированием
Старый 11.12.2010, 19:05   #12
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Не знаю, может и проще можно сделать, но сделал вот так,зато теперь то, что нужно, =)
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TArrayCoords=array [0..1] of Integer;
  TStartPoint=record
    X,Y:TArrayCoords;
  end;

type
  Tf3p=array [0..2] of Byte;
  Pf3p=^Tf3p;

var
  Form1: TForm1;
  gBuffer:TBitmap;
  gf3p:Pf3p;
  gGlobalCoords:TStartPoint;
  gDownUp:Boolean;
  gRect:TRect;
  gOutBmp:Tbitmap;

implementation

{$R *.dfm}

procedure pCurvePaint(aInOutBmp:TBitmap; aCoords:TStartPoint; aCompare:Boolean;
                      aShowingBmp:TBitmap);
Var
  i,j:Integer;
  Center:Integer;
  HighX,HighY,LowX,LowY:Integer;
  PersonalData:Pf3p;
begin
//Рисуем на битмапе aInOutBmp
  If (aCoords.X[1]>aInOutBmp.Width) then
    aCoords.X[1]:=aInOutBmp.Width-1;
  If (aCoords.X[1]<0) then
    aCoords.X[1]:=0;
  If (aCoords.Y[1]>aInOutBmp.Height) then
    aCoords.Y[1]:=aInOutBmp.Height-1;
  If (aCoords.Y[1]<0) then
    aCoords.Y[1]:=0;
  If aCoords.X[0]>aCoords.X[1] then
  begin
    HighX:=aCoords.X[0];
    LowX:=aCoords.X[1];
  end
  else
  begin
    HighX:=aCoords.X[1];
    LowX:=aCoords.X[0];
  end;
  If aCoords.Y[0]>aCoords.Y[1] then
  begin
    HighY:=aCoords.Y[0];
    LowY:=aCoords.Y[1];
  end
  else
  begin
    HighY:=aCoords.Y[1];
    LowY:=aCoords.Y[0];
  end;
//стерли все.
  For i:=0 to pred(aInOutBmp.Height) do
  begin
    gf3p:=aInOutBmp.ScanLine[i];
    For j:=0 to pred(aInOutBmp.Width) do
    begin
      gf3p^[0]:=255;
      gf3p^[1]:=255;
      gf3p^[2]:=255;
      If j<pred(aInOutBmp.Width) then
        inc(gf3p);
    end;
  end;
//
  If ((aCoords.X[0]>aCoords.X[1]) and (aCoords.Y[0]>aCoords.Y[1])) or
     ((aCoords.X[0]<aCoords.X[1]) and (aCoords.Y[0]<aCoords.Y[1])) then
  begin
    Center:=((HighX-LowX) div 2)+LowX;
      gf3p:=aInOutBmp.ScanLine[LowY];
      inc(gf3p,LowX);
      For j:=LowX to Center do
      begin
        gf3p^[0]:=0;
        gf3p^[1]:=0;
        gf3p^[2]:=0;
        If j<Center then
          inc(gf3p);
      end;
      For i:=LowY+1 to HighY-1 do
      begin
        gf3p:=aInOutBmp.ScanLine[i];
        inc(gf3p,Center);
        gf3p^[0]:=0;
        gf3p^[1]:=0;
        gf3p^[2]:=0;
      end;
      gf3p:=aInOutBmp.ScanLine[HighY];
      inc(gf3p,Center);
      For j:=Center to HighX do
      begin
        gf3p^[0]:=0;
        gf3p^[1]:=0;
        gf3p^[2]:=0;
        If j<HighX then
          inc(gf3p);
      end;
  end
  else
  begin
    Center:=((HighX-LowX) div 2)+LowX;
      gf3p:=aInOutBmp.ScanLine[LowY];
      inc(gf3p,Center);
      For j:=Center to HighX do
      begin
        gf3p^[0]:=0;
        gf3p^[1]:=0;
        gf3p^[2]:=0;
        If j<HighX then
          inc(gf3p);
      end;
      For i:=LowY+1 to HighY-1 do
      begin
        gf3p:=aInOutBmp.ScanLine[i];
        inc(gf3p,Center);
        gf3p^[0]:=0;
        gf3p^[1]:=0;
        gf3p^[2]:=0;
      end;
      gf3p:=aInOutBmp.ScanLine[HighY];
      inc(gf3p,LowX);
      For j:=LowX to Center do
      begin
        gf3p^[0]:=0;
        gf3p^[1]:=0;
        gf3p^[2]:=0;
        If j<Center then
          inc(gf3p);
      end;
  end;
//Нарисовали

//Скопировали нарисованное
  If not aCompare then
  begin
    For i:=0 to pred(aInOutBmp.Height) do
    begin
      gf3p:=aInOutBmp.ScanLine[i];
      PersonalData:=aShowingBmp.ScanLine[i];
      For j:=0 to pred(aInOutBmp.Width) do
      begin
        If gf3p^[0]=0 then
        begin
          PersonalData^[0]:=0;
          PersonalData^[1]:=0;
          PersonalData^[2]:=0;
        end;
        If j<pred(aInOutBmp.Width) then
        begin
          inc(gf3p);
          inc(PersonalData);
        end;
      end;
    end;
  end;
  For i:=0 to pred(aInOutBmp.Height) do
  begin
    gf3p:=aInOutBmp.ScanLine[i];
    PersonalData:=aShowingBmp.ScanLine[i];
    For j:=0 to pred(aInOutBmp.Width) do
    begin
      If PersonalData^[0]=0 then
      begin
        gf3p^[0]:=0;
        gf3p^[1]:=0;
        gf3p^[2]:=0;
      end;
      If j<pred(aInOutBmp.Width) then
      begin
        inc(gf3p);
        inc(PersonalData);
      end;
    end;
  end;
//
//Показали нарисованное
  Form1.Canvas.CopyRect(gRect,aInOutBmp.Canvas,gRect);
end;
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 11.12.2010, 19:05   #13
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  gBuffer:=TBitmap.Create;
  gBuffer.PixelFormat:=pf24bit;
  gBuffer.Height:=Form1.Height;
  gBuffer.Width:=Form1.Width;
  gRect.Right:=Form1.Width;
  gRect.Left:=0;
  gRect.Top:=0;
  gRect.Bottom:=Form1.Height;
  gOutBmp:=TBitmap.Create;
  gOutBmp.PixelFormat:=pf24bit;
  gOutBmp.Height:=Form1.Height;
  gOutBmp.Width:=Form1.Width;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  gDownUp:=true;
  gGlobalCoords.X[0]:=X;
  gGlobalCoords.Y[0]:=Y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Form1.Caption:=Inttostr(X)+'X'+Inttostr(Y);
  If gDownUp then
  begin
    gGlobalCoords.X[1]:=X;
    gGlobalCoords.Y[1]:=Y;
    pCurvePaint(gBuffer,gGlobalCoords,gDownUp,gOutBmp);
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  gDownUp:=false;
  gGlobalCoords.X[1]:=X;
  gGlobalCoords.Y[1]:=Y;
  pCurvePaint(gBuffer,gGlobalCoords,gDownUp,gOutBmp);
end;

begin
  gDownUp:=false;
end.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 11.12.2010, 19:18   #14
Danilka
Пользователь
 
Аватар для Danilka
 
Регистрация: 30.03.2010
Сообщений: 28
По умолчанию

ImmortalAlexSan, Преогромнейшее спасибо вам =) то что нужно =)
Никогда и ничего не просите! Никогда и ничего, и в особенности у тех, кто сильнее вас. Сами предложат и сами все дадут! © Булгаков
Danilka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
боьшая линия waffe66 HTML и CSS 1 27.03.2010 19:22
Линия SheriffCat Microsoft Office Word 8 22.10.2009 19:20
Линия тренда maxic Microsoft Office Excel 0 15.09.2009 18:23
Линия на осях 4ifir01 Мультимедиа в Delphi 3 08.12.2008 17:24
Прямая линия serres Общие вопросы Delphi 1 04.11.2007 18:33