Конференция "KOL" » Создание и уничтожение массива объектов [Delphi, Windows]
 
  • RusSun © (22.07.15 19:05) [0]
    Всем привет. Как реализовать в программе следующее.

    1 Создание и уничтожение получилось. + сделать.
    2 Прицепить события.
    Тут у меня загвоздка получилась.
    Создал сообщение через sender оно работает, но
    вторая часть не корректно. (то бишь левый клик работает,
    а правый не так как ожидалось)

    Пример ссылка на яндекс диск. https://yadi.sk/d/LDRw6TAEhzoJm

    Должно быть так кликаем левой mbLeft на панельку (любую) она занимает пространство Align caClient

     if (Mouse.Button = mbLeft) then Begin
       PControl(sender).SetAlign ( caClient ).CenterOnParent.Tabulate;  //CtrlList.Items[j]
       PControl(sender).Caption:='Click';
                                  End else
    // (Mouse.Button = mbRight)
                                  begin

       PControl(sender).SetAlign ( caNone );
       PControl(sender).SetSize(95,56).SetPosition(10+(TrackBar8.Position - 1) * 98,20).SetBorder( 2);
                                  end;
    Mouse.StopHandling := TRUE;


    Кликаем правой mbRight всё возвращается в исходную позицию,
    но с возвратом проблема любая панель принимает форму последней в очереди. И у меня нет идей как это поправить.(

    Мысль дельная с  PControl(sender). но что-то не правильно робит.
  • Thaddy © (25.07.15 11:09) [1]
    Something like this?

    program mousetest;
    {$IFDEF FPC}{$MODE DELPHI}{$H+}{$APPTYPE GUI}{$ENDIF}
    uses
     Kol,mouse1 in 'mouse1.pas';
    begin
     NewForm1( Form1, nil);
     Run(Form1.form);
    end.



    unit mouse1;

    interface
    uses
     Windows, Messages, Kol;
    const
    cps:KolString = 'Kol project in ' + {$IFDEF FPC}'Freepascal '{$ELSE}'Delphi '{$ENDIF} +
       {$IFDEF WIN64}'64 bits '{$ELSE}'32 bits '{$ENDIF} +
       {$IFDEF UNICODE_CTRLS}'Unicode'{$ELSE}'Ansi'{$ENDIF};
    type

    PForm1=^TForm1;
    TForm1=object(Tobj)
     Form:pControl;
     Panel:PControl;
    private
     FBorder:Integer;
    public
     procedure DoMouse( Sender: PControl; var Mouse: TMouseEventData );
    end;

    procedure NewForm1( var Result: PForm1; AParent: PControl );

    var
     Form1:pForm1;

    implementation

    procedure NewForm1( var Result: PForm1; AParent: PControl );
    begin
     New(Result,Create);
     with Result^ do
     begin
       Form:= NewForm(AParent,cps);
       Applet:=Form;
       Panel :=NewPanel(form, esRaised);
       Panel.Color := clGreen;
       Panel.OnMouseUp := DoMouse;
       FBorder := Panel.Border;
       Form.Add2AutoFree(Result);
     end;
    end;

    procedure TForm1.DoMouse(Sender: PControl; var Mouse: TMouseEventData);
    begin
      case Mouse.Button of
      mbLeft: begin Sender.SetBorder(Fborder);Sender.SetAlign(caClient);end;
      mbRight:Sender.SetAlign(caNone).SetPosition(30,30).SetBorder(2).SetSize(95,56);
      else
       ;
      end;
    end;

    end.

  • Thaddy © (25.07.15 11:16) [2]
    This may be a little bit better to demonstrate:

      mbRight:Sender.SetAlign(caNone).SetPosition(30+Random(form.Clientwidth-100),Random(Form.ClientHeight-100)).SetBorder(2).SetSize(95,56);



    Left click: caClient
    Right click: random position (or in your case trackbar)
  • RusSun © (25.07.15 15:45) [3]
    Ссылка Пример ссылка на яндекс диск. Не рабочая.
    Обновил.
    https://yadi.sk/d/A1XlVwOCi5p5R
  • RusSun © (25.07.15 19:25) [4]
    Hi. Right click: random position (or in your case trackbar)

    It isn't random position. This is emulation of selection of date 1-7 days. And it makes several panels with descriptions. After that. I will able to choose panel and if i choose Left click : Panel with description will be a
    caClient

    . After that. I'll read description.After reading. I'll make Right click and it's back to previous position and size.

    I mean I make objects runtime with position of trackbar. And hang events. But then i make Right click it is not goes back to position and size. It goes to the last object with I add to the "CtrlList:PList;" It takes position and size of the most lastest added object. As you can see it on my example.
  • RusSun © (10.08.15 19:46) [5]
    to Thaddy: Thanks for your help and quick response.

    Today I found how to solve issue.
    Send me an email if you are interested.
  • Kodjovi (25.11.15 02:23) [6]
    Удалено модератором
 
Конференция "KOL" » Создание и уничтожение массива объектов [Delphi, Windows]
Есть новые Нет новых   [134427   +35][b:0][p:0.002]