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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2009, 20:16   #1
Ky3Heu,
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 94
По умолчанию Динамические компоненты. Уже не могу..

Проблема в том, что мне необходимо для динамически созданных компонентов определить 1) Имя этого компонента. 2) Создать возможность перетаскивать эти компоненты по PAgeControl. Пробовал так:
Код:
var 
im:TImage;
    tab:TTabSheet;
    im_nam,im_path,tab_nam:String;
    i,im_cod,tab_cod:Integer;
begin
PiOBJ.Open;
OBJ.Open;
im:=TImage.Create(PageControl1.ActivePage);
im.Parent:=PageControl1.ActivePage;
im.OnClick:=Button1Click;
im.PopupMenu:=Obj_Menu;
im.Top:= 100;
im.Left:=100;
im.Name:='Im5555';
end;
на OnClick вешал
Код:
{begin
for i:=0 to PageControl1.ActivePage.ComponentCount-1 do
begin
    if (PageControl1.ActivePage.Components[i] is Timage)=Focused then
    begin
    im_nam:=(PageControl1.ActivePage.Components[i] as TImage).Name;
    Form1.Caption:=im_nam;
    end;
end;}
Но это не сработало Попробовал так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  p: TPoint;
  c: TControl;
begin
  GetCursorPos(p);
  p := ScreenToClient(p);
  c := ControlAtPos(p,false,true);
  Form1.caption := inttostr(p.x)+', '+ inttostr(p.y)+' - ';
  if c<> nil then Form1.caption :=c.Name;
end;
Это работает, но имя правильное компонента я получаю, если компонент создан на Form1. Иначе выдает PageControl1. А должен im5555.
Уже не знаю, что делать?? Проект загибается, не успев начаться, а мне еще голову ломать над тем, как эти имаджи потом таскать по PageControl. Кстати имаджи нужно создавать ИМЕННО на PageControl.
По ракетам и хоккею - Россияне всех сильней!
Ky3Heu, вне форума Ответить с цитированием
Старый 14.04.2009, 20:43   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Сделай обработчик типа "таскалка для панелей"

Код:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
begin
  Form1.Caption := (Sender as TComponent).Name;

  ReleaseCapture;
  (Sender as TPanel).Perform(WM_SYSCOMMAND, $F012, 0);
end;
И потом назначай его всем остальным панелям (например).
С потомками TGraphicControl WM_SYSCOMMAND не прокатит, там надо мудрить (запоминать координаты миши, обрабатывать MouseDown, MouseUp...).
Готовый "таскающийся TImage" есть тут http://programmersforum.ru/showpost....0&postcount=12
пыщь
JTG вне форума Ответить с цитированием
Старый 15.04.2009, 15:05   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

листинг первогго поста.. im.Name:='Im5555'; нельзя задавать статическое имя.. или при создании второго компонента будет ошибка.. напишетт мол компонент с таким именем уже существует..
листинг второй попробуй исправить на такое:

Код:
begin
for i:=0 to PageControl1.ActivePage.ComponentCount-1 do
  begin
    if (PageControl1.ActivePage.Components[i] is Timage) then
      begin
        im_nam:=(PageControl1.ActivePage.Components[i] as TImage).Name;
        Form1.Caption:=im_nam;
      end;
  end;
дальше.. шобы перетаскивать компоненты кинь на форму какой нить статический компонент и напиши процедуры перетаскивания для него (тем полно как это сделать).. потом компоненту ту можешь удалить.. главное оставь процедуры и при динамическом создани компонента просто присваивай их ему..

Код:
  private
    procedure MyImageMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MyImageMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure MyImageMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
***
var 
im:TImage;
    tab:TTabSheet;
    im_nam,im_path,tab_nam:String;
    i,im_cod,tab_cod:Integer;
begin
PiOBJ.Open;
OBJ.Open;
im:=TImage.Create(PageControl1.ActivePage);
im.Parent:=PageControl1.ActivePage;
im.OnClick:=Button1Click;
im.PopupMenu:=Obj_Menu;
im.Top:= 100;
im.Left:=100;
im.Name:='Im5555';
im.OnMouseDown:=MyImageMouseDown;
im.MouseMove:=MyImageMouseMove;
im.MouseUp:=MyImageMouseUp;
end;
ну.. вроде все.. и писать свою компоненту не нада
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установил Elpack, но не могу использовать компоненты SnakeMan Компоненты Delphi 0 13.03.2009 07:11
Динамические компоненты и MouseMove Шульц Общие вопросы Delphi 10 23.01.2009 11:27
Условие задачи уже выложил... Рустем Помощь студентам 4 16.01.2009 02:03
Уже не студент, и не могу преодолеть сложность (строки, *.txt) SarahConner Помощь студентам 6 13.01.2009 16:24
уже второй день парюсь! Алёна БД в Delphi 9 16.03.2007 08:22