Конференция "KOL" » Проблема со ScrollBox. [Delphi, Windows]
 
  • Valera (12.05.08 17:43) [0]
    Всем привет.
    Возможно я вас достал своими вопросами но пока я в KOL плохо ориентируюсь.
    У меня вопрос как мне вставить ScrollBox в PaintBox так если в нем большая картинка то он становился видимым и я мог бы прокручивать картинку в нем. А если картинка маленкая то он изчезал.


    program paintMy;

    uses
    Windows,
    messages,
    KOL;

    var
    form,PaintBox,ScrollBox:PControl;
    PaintBmp,MainTemp:Pbitmap;
    xD,yD:integer;
    mousedown:boolean;

    procedure MouseDown_(Dummy : Pointer;Sender: PControl; var Mouse: TMouseEventData );
    begin
    MainTemp.CopyRect(MainTemp.BoundsRect, PaintBmp,PaintBmp.BoundsRect);
    xD:=Mouse.x;
    yd:=Mouse.y;
    PaintBox.Invalidate;
    mousedown:=True;
    end;

    procedure MouseMove_(Dummy : Pointer; Sender: PControl; var Mouse: TMouseEventData );
    begin
    IF mousedown then begin
      PaintBmp.CopyRect(PaintBmp.BoundsRect, MainTemp, MainTemp.BoundsRect);
      PaintBmp.Canvas.MoveTo(xd,yd);
      PaintBmp.Canvas.LineTo(Mouse.x,Mouse.y);
    end;
    PaintBox.Invalidate;
    end;

    procedure MouseUp_(Dummy : Pointer; Sender: PControl; var Mouse: TMouseEventData );
    begin
    if mousedown then begin
      PaintBmp.CopyRect(PaintBmp.BoundsRect, MainTemp, MainTemp.BoundsRect);
      PaintBmp.Canvas.MoveTo(xd,yd);
      PaintBmp.Canvas.LineTo(Mouse.x,Mouse.y);
    end;
    PaintBox.Invalidate;
    mousedown:=False;
    end;

    procedure Paint( Dummy : Pointer; Sender: PControl; DC: HDC );
    begin
    PaintBmp.Draw(DC,0,0);
    end;

    procedure ChangeScrollBox( Dummy : Pointer; Sender: PObj);
    begin

    end;

    begin
    form:=NewForm(nil,'Paint').SetSize(800,800);

    PaintBox:=NewPaintBox(Form);
    PaintBox.Align:=caClient;
    PaintBox.OnMouseDown:= TOnMouse( MakeMethod( nil, @MouseDown_ ) );
    PaintBox.OnMouseMove:= TOnMouse( MakeMethod( nil, @MouseMove_ ) );
    PaintBox.OnMouseUp:= TOnMouse( MakeMethod( nil, @MouseUp_ ) );
    PaintBox.OnPaint:= TOnPaint( MakeMethod( nil, @Paint ) );
    ///**************************************************************
    MainTemp:=newBitmap(PaintBox.Width,PaintBox.Height);
    MainTemp.Invert;
    PaintBmp:=newBitmap(PaintBox.Width,PaintBox.Height);
    PaintBmp.Invert;

    ///ScrollBox:=NewScrollBox(Form,esnone,[sbHorizontal,sbVertical]).SetSize(PaintBox. Width,PaintBox.Height);
    /////ScrollBox.
    ///ScrollBox.OnChange:= TOnEvent( MakeMethod( nil, @ChangeScrollBox ) );

    Run(form);  ////// çàïóñê ôîðìû

    end.


  • D[u]fa (12.05.08 18:25) [1]
    надо в скроллбокс вставлять пайнтбокс. почитаю книгу про кол, отпадет половина вопросов =)
  • Valera (12.05.08 20:43) [2]
    Спасибо этого я незнал.
  • Valera (12.05.08 21:24) [3]
    Дайте ссылку на исходник на kol чтобы там был ScrollBox.А то я так ничего и не сделал.
  • Valera (12.05.08 21:25) [4]
    Или хотя бы пример работы со Scrollbox.
  • D[u]fa (13.05.08 09:54) [5]
    там все просто. создал скроллбокс, в него положил пайнтбокс, задал пайнтбоксу большой размер (больше скроллбокса) вот и появились скроллы
  • Barloggg (20.05.08 10:28) [6]
    а если у тебя размеры паинтбокса будут меняться время от времени, то возможны грабли :) ибо скроллбокс работает по принципу "минимум кода" и не следит особо за координатами вложенных если вроде как нет нужды.

    а насчет создания:
    создаешь скроллбокс.
    потом создаешь паинтбокс, указывая ему в скроллбокс в роли родительского.
 
Конференция "KOL" » Проблема со ScrollBox. [Delphi, Windows]
Есть новые Нет новых   [134431   +15][b:0][p:0.002]