Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Клонирование TPanel с содержимым.   Найти похожие ветки 

 
Gnobobel   (2006-01-28 22:51) [0]

У меня есть готовая TPanel с картинкой и парой лейбелов/кнопоко etc. Мне нужно Runtime добавлять и убирать новые панельки и получать Event"ы от них и их дочерних компонентов.
Как?


 
tesseract ©   (2006-01-28 22:55) [1]

С парой и более компонетов - лучше сделать фрейм. А в любом Event есть параметр - Sender.


 
AbrosimovA   (2006-01-30 08:52) [2]

Например, через буфер обмена:

Uses Clipbrd, ...;

const S = "bla-bla-bla";

procedure WriteToClipBoard(strFormat: PChar; Component: TComponent);
var
 CF_MYFORMAT : cardinal;
 hbuf        : THandle;
 bufptr      : Pointer;
 mstream     : TMemoryStream;
begin
CF_MYFORMAT := RegisterClipboardFormat(strFormat);
mstream := TMemoryStream.Create;
try
  mstream.WriteComponent(Component);
  mstream.Seek(0, soFromBeginning);
  hbuf := GlobalAlloc(GMEM_MOVEABLE, mstream.size);
  try
   bufptr := GlobalLock(hbuf);
   try
    Move(mstream.Memory^, bufptr^, mstream.size);
    Clipboard.SetAsHandle(CF_MYFORMAT, hbuf);
   finally
    GlobalUnlock(hbuf);
   end;
  except
   GlobalFree(hbuf);
   raise;
  end;
finally
 mstream.Free;
end;
end;

function ReadFromClipBoard(fmtText: string; Component: TComponent): string;
var
 hbuf    : THandle;
 bufptr  : Pointer;
 mstream : TMemoryStream;
 buf: array[0..60] of Char;
 n: Integer;
 fmt: Word;
begin
 fmt:=0;
 Result:="";
 for n := 0 to Clipboard.FormatCount - 1 do
 begin
  fmt := Clipboard.Formats[n];
  if GetclipboardFormatName(fmt, buf, Pred(Sizeof(buf))) <> 0 then
   if StrPas(buf) = S then  Break;
 end;
 hbuf := Clipboard.GetAsHandle(fmt);
 if hbuf <> 0 then
 begin
  bufptr := GlobalLock(hbuf);
  if bufptr <> nil then begin
   try
    mstream := TMemoryStream.Create;
     try
      mstream.WriteBuffer(bufptr^, GlobalSize(hbuf));
      mstream.Position := 0;
      mstream.Seek(0, soFromBeginning);
      mstream.ReadComponent(Component);
     finally
      mstream.Free;
     end;
   finally
    GlobalUnlock(hbuf);
   end;
  end;
 end;
end;

Вызов функций:

WriteToClipBoard(PChar(S),Panel1);
ReadFromClipBoard(S, Panel1);


 
Gnobobel   (2006-01-30 17:06) [3]

Мда... ну и что мне даст использование фреймов? Как клонировать панельки, обращатся к их компонентам, получать их ивенты?


 
Gero ©   (2006-01-30 23:53) [4]

> Мда... ну и что мне даст использование фреймов?

Можно без проблем создавать сколько угодно копий.
Клонировать не нужно, просто

NewFrame := TMySuperFrame.Create(..);
NewFrame.Parent := ...;

Обращаться очень просто, через NewFrame.что_угодно.


 
Gnobobel   (2006-01-31 19:39) [5]

Ну я так себе и представлял. Описать класс фрейма со всеми фишками и создавать его копии, но как сообщения получать?

NewFrame.Label1.@OnClick := Func; //? =)


 
аноним   (2006-01-31 20:18) [6]

NewFrame.Label1.@OnClick := Func;

что за привычка пошла так к методам относиться у народа? уже не первый раз вижу. как только не извращаются. учите матчасть.


 
Shirson ©   (2006-02-01 15:11) [7]

Gnobobel, собаку убрать, просто NewFrame.Label1.OnClick:=Func;


 
msguns ©   (2006-02-01 15:30) [8]

А что, обработка кликов одной и той же кнопки разных экземпляров одного и того же блока контролов ("нагруженная" панель или фрэйм) различается ?



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
2-1140026301
Корешь
2006-02-15 20:58
2006.03.05
Массив из записей как с ним работать?


15-1139569348
Kerk
2006-02-10 14:02
2006.03.05
Пентагон создает руку Терминатора


2-1139741086
ZeFiR
2006-02-12 13:44
2006.03.05
MDI приложение


15-1139761406
тихий вовочка
2006-02-12 19:23
2006.03.05
Ищу совет по поздравлению


15-1139650945
Yanis
2006-02-11 12:42
2006.03.05
Вот это война :)