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

Вниз

Подмена имени   Найти похожие ветки 

 
Areon   (2003-01-31 08:22) [0]

Есть вопросик!
Допустим имеется две метки label1 и label2
Задача такая необходимо поменять имена этим меткам
т.е.
label1 присвоить имя label2
а label2 присвоить имя label1.

Есть какие нибудь идеи по этому поводу?


 
Digitman   (2003-01-31 08:31) [1]

это очень сложно)

вряд ли у тебя получится сделать так :

var
s1, s2: string;

...
s1:= label1.Name;
s2:= label2.Name;
label1.Name := "";
label2.Name := "";
label1.Name := s2;
label2.Name := s1;



 
bis   (2003-01-31 08:32) [2]

а у тебя самого совсем ни одной?


 
Areons   (2003-01-31 09:17) [3]

А ты попробуй этот пример он не работает.
так как при присвоении label1 нового имени старое удаляется т.е. небудет имени label1


 
Спрашивающий   (2003-01-31 09:35) [4]

Совет:
Строй алгоритм без смены имен.


 
Digitman   (2003-01-31 09:39) [5]


> этот пример он не работает.
> так как при присвоении label1 нового имени старое удаляется
> т.е. небудет имени label1


Чушь какая)

Ты не путай св-во объекта "Name" с именем программного идентификатора !


 
Archon Kazansky   (2003-01-31 10:44) [6]

Интересно, зачем такое понадобилось?


 
mrcat   (2003-01-31 10:54) [7]

Digitman © (31.01.03 08:31)
...
вряд ли у тебя получится сделать так
...


попробовал - не работает


 
Digitman   (2003-01-31 12:22) [8]

Specifies the name of the control as referenced in code.

property Name: TComponentName;

Description

Use the Name property to assign a new name to the control or to find out what the name of the control is.

By default, the IDE assigns sequential names based on the type of the control, such as "Button1", "Button2", and so on. Change these to more meaningful names that make the application’s code more readable. The Name must be a valid Object Pascal identifier.

If the control’s Caption has not already been modified, Caption is changed to match a new control name.

Warning: Change control names only at design time.


 
han_malign   (2003-01-31 12:28) [9]

var lb: TLabel;
nm: string;
begin
lb:=Label1;
nm:=lb.Name;
Label1:=Label2;
Label2:=lb;
Label2:=Label1.Name;
Label1.Name:=nm;
end;


 
REA   (2003-01-31 12:32) [10]

А ты им координаты поменяй. Эффект примерно тот же.

2Digitman: Спасибо за критику - ошибка совсем в другом месте у меня вчера была.


 
Digitman   (2003-01-31 12:36) [11]


> han_malign


Label2:=Label1.Name; - это нонсенс

А уж если
Label2.Name:=Label1.Name;
то такой фокус не прокатит


 
Digitman   (2003-01-31 12:37) [12]


> REA


Да не за фто)



 
D   (2003-01-31 12:45) [13]

Странно, зачем это нужно?..

procedure TForm1.BitBtn1Click(Sender: TObject);
var name1,name2:string; P:^TLabel;
begin
name1:=Label1.Name;
name2:=Label2.Name;
New(p);
P^:=Label1; // Запоминаем адрес, чтоб потом было к чему
//обращаться
Label1.Name:="promezutochnoeImja";
label2.Name:=name1;
P^.Name:=name2;

end;


 
han_malign   (2003-01-31 12:56) [14]

>А уж если
>Label2.Name:=Label1.Name;
>то такой фокус не прокатит
- если..., а фокус прокатит, у меня прокатывал, правда не в таком извратном варианте, я динамически созданной компоненте имя присваивал.
З.Ы. Правда нужно это, только если RX Lib - FormStorage юзать... В моем конкретном случае, это было нужно для смены языка интерфейса на лету, с использованием RTTI(для автоматической смены Caption-ов по всем компонентам) и языковых файлов в формате INI...


 
Digitman   (2003-01-31 13:31) [15]


> а фокус прокатит, у меня прокатывал, правда не в таком извратном
> варианте, я динамически созданной компоненте имя присваивал.


В пределах одного и того же Owner"а имя компонента д.б. уникальным ! При динамической попытке конструирования компонента его св-во Name инициализируется в "", и это не противоречит требованию уникальности, тем более если Owner = nil. Но как только следом за конструированием ты попытаешься изменить Name на "SomeName" и в этот момент Owner <> nil уже имеет хотя бы один доч.компонент с именем "SomeName", то исключение по неуникальности имени компонента тебе гарантировано.


 
han_malign   (2003-01-31 13:54) [16]

ну тады:
var lb: TLabel;
nm1,nm2: string;
begin
lb:=Label1;
nm1:=Label1.Name;
nm2:=Label2.Name;
Label1.Name:="";
Label1:=Label2;
Label2:=lb;
Label1.Name:=nm1;
Label2.Name:=nm2;
end;
- по исходникам никаких препятствий не нашел, надо-бы проверить на деле, но в преддверии китайского нового года - в лом...


 
Darkwin   (2003-01-31 13:58) [17]

Я так понял ему в какое то время необходимо работать с Label1 так ка с Label2 и наоборот. Ето очень просто делается:
procedure TForm1.Button2Click(Sender: TObject);
var
p1,p2:pointer;
begin
ShowMessage(Label1.Caption+ Label2.Caption);
p1:=Label1;
p2:=Label2;
Label1:=p2;
Label2:=p1;
ShowMessage(Label1.Caption+ Label2.Caption);
end;


 
Digitman   (2003-01-31 14:33) [18]


> han_malign


Label1.Name:="";
..
Label1.Name:=nm1; // здесь ты 100%-но схлопочешь AV ! Ибо Label1 уже = nil !


 
eheyler   (2003-01-31 14:41) [19]

Так должно сработать (но не проверял)
var L1, L2: TLabel;
N1, N2: string;

L1 := Label1;
L2 := Label2;

N1 := L1.Name;
N2 := L2.Name;
L2.Name := "";
L1.Name := N2;
L2.Name := N1;

Вся проблема в ф-и SetReference, вызываемой при изменении имени:

procedure TComponent.SetReference(Enable: Boolean);
var
Field: ^TComponent;
begin
if FOwner <> nil then
begin
Field := FOwner.FieldAddress(FName);
if Field <> nil then
if Enable then Field^ := Self else Field^ := nil;
end;
end;


 
Darkwin   (2003-01-31 15:29) [20]

если надо поменять только имя, то:
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2:TComponentName;
p1,p2:Pointer;
begin
ShowMessage(Label1.Name+Label2.Name);
p1:=@(Label1.Name);
p2:=@(Label2.Name);
s1:=Label1.Name;
s2:=Label2.Name;
string(p1^):=Label1.Name+Label2.Name;
string(p2^):=s1;
string(p1^):=s2;
ShowMessage(Label1.Name+Label2.Name);
end;

работает на все 100%



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

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

Наверх




Память: 0.49 MB
Время: 0.009 c
1-28837
anatolyk
2003-02-02 20:38
2003.02.10
ActionList


6-28962
umr
2002-12-14 08:44
2003.02.10
как можно найти MAC адрес удаленного компьютера


1-28903
4rex
2003-01-31 05:03
2003.02.10
Как получить имя файла из ListBox и открыть этот файл в mplayer2


14-28993
Igor_thief
2003-01-26 15:29
2003.02.10
StringGrid


14-29088
Yuraz
2003-01-25 16:26
2003.02.10
HELP! при смене винта с w2k на др. тачку загрузка виснет!





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