Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Создание и уничтожение массива объектов [Delphi, Windows]


RusSun ©   (22.07.15 19:05

Всем привет. Как реализовать в программе следующее.

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]

Удалено модератором


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо