Главная страница
    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.013 c
3-1136889969
moteus
2006-01-10 13:46
2006.03.05
Проблема с потерей коннекта в ODAC


15-1139612060
Гаврила
2006-02-11 01:54
2006.03.05
Rouse - поздравлялки :-)


4-1134385526
epifansan
2005-12-12 14:05
2006.03.05
Как программно реализовать запись на CD-ROM или DVD-ROM


2-1140292236
TStas
2006-02-18 22:50
2006.03.05
DeleteFolder


2-1140069027
Spieler
2006-02-16 08:50
2006.03.05
TService типа stDevice в Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский