Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Вниз

Клонирование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.016 c
1-1138970255
Ega23
2006-02-03 15:37
2006.03.05
Использование нескольких TActionList


1-1138504415
Linn
2006-01-29 06:13
2006.03.05
Hotkeys


1-1138446074
YurySS
2006-01-28 14:01
2006.03.05
Настройка REPOSITORY


3-1136465833
tytus
2006-01-05 15:57
2006.03.05
BDE Error Field(xxx) mast have value


1-1138611367
WondeRu
2006-01-30 11:56
2006.03.05
Многопоточность и Property Page - не дружат?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский