-
Всем привет. Как реализовать в программе следующее.
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). но что-то не правильно робит. -
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. -
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) -
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 acaClient
. 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. -
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]Удалено модератором