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

Вниз

Как правильно переименовать компонент в runtime ?   Найти похожие ветки 

 
alextov   (2002-10-18 11:32) [0]

Нужно скопировать кнопку через Clipboard и работать с обеими кнопками. При следующем коде возникает Access Violation :
Var OldButton: TButton;
Begin
Clipboard.SetComponent(Button1);//копируем Button1 в клиппбоард
Button1.Name := "OldButton"; //
Clipboard.GetComponent(Self, GroupBox1); //вставляем Button1 из клиппбоарда
oldButton.Caption:="ok"; //--------Access Violation
End;
Может кто подскажет что изменить надо....(менять ДНК не предлагать :))))


 
han_malign   (2002-10-18 11:56) [1]

из Clipboard вставляем анонимный компонент, потом вызываем property у неинициализировнного объекта oldButton - и это должно работать???
Может всетаки
oldButton:=Clipboard.GetComponent(Self, GroupBox1); //вставляем Button1 из клиппбоарда
З.Ы. Менять ДНК тогда всем придется, ты бы видел какие ляпы опытные программисты допускают(чем элементарнее ошибка, тем сложнее ее найти), правда не в таком объеме кода, а побольше(на пару порядков).


 
Kibitzer   (2002-10-18 12:01) [2]

Шутник ты однако :-)

procedure TForm1.Button1Click(Sender: TObject);
var
OldButton: TButton;
begin
Clipboard.SetComponent(Button1);
Button1.Name := "OldButton";
OldButton := Button1;
Button1 := Clipboard.GetComponent(Self, GroupBox1) as TButton;
Button1.Caption:="ok";
end;


 
han_malign   (2002-10-18 12:16) [3]

и не проще ли
OldButton:=TButton.Create(GroupBox1);//или к Form1- что по умолчанию делается(Create(nil))
OldButton.Assign(Button1);
OldButton.Name:="OldButton";
OldButton.Parent:=GroupBox1;
OldButton.Caption:="ok";



 
alextov   (2002-10-18 12:48) [4]

Вполне логично. И довольно просто. Что называется "за деревьями леса не увидел".
Всем спасибо.


 
Le Taon   (2002-10-18 14:28) [5]

han_malign ©
К сожалению, в компонентах Assign не реализован.

А зачем, кстати, изменять Имя компонента? - зачем оно нужно?
Дело в том, что имя - не простое свойство, а автоматически создаваемые поля формы с этими именами - не простые переменные.
Они связаны и в рантайме через метод SetReference + RTTI.

Пример:

TForm1 = class(TForm)
Button1: TButton;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Name := "Test";
Button1.Caption := "Ok"; // - здесь уже Button1 = nil;
end;

PS я советую не трогать имена в рантайме, они никакой смысловой нагрузки там уже не несут.



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

Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
3-92409
Maik
2002-10-07 18:25
2002.10.28
Последовательное выполнение Select


1-92523
Voland1
2002-10-17 17:45
2002.10.28
Глюк IDE или программы? Не там точки компиляции...


1-92429
brestmarket
2002-10-17 12:29
2002.10.28
Как избежать неприятного скачка черного цвета при


1-92450
Dasha
2002-10-18 05:17
2002.10.28
RX-Library


1-92554
LongIsland
2002-10-16 13:24
2002.10.28
Копирование данных из буфера в TStringGrid





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