Форум: "Основная";
Текущий архив: 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