Вверх ↑
Этот топик читают: Гость
Ответов: 58
Рейтинг: 1
#1: 2015-10-09 21:22:40 ЛС | профиль | цитата
Как поменять класс окна?
Допустим класс моей формы называется Form1. Хочу сменить это название на абсолютно любое,не обязательно прямо при выполнении программы,главное просто поменять класс.

Сделал не большую программу,через которую можно посмотреть класс:
code_36364.txt
карма: 0

0
файлы: 1code_36364.txt [671B] [107]
Ответов: 1304
Рейтинг: 405
#2: 2015-10-09 21:28:59 ЛС | профиль | цитата
Jonson, Уничтожить окно и создать новое
карма: 3

0
Ответов: 58
Рейтинг: 1
#3: 2015-10-09 21:33:00 ЛС | профиль | цитата
MAV, а как запустить исполняемый файл с определенным называнием class ?
то есть надо перед запуском программы уже присвоить class окну?
карма: 0

0
Ответов: 1304
Рейтинг: 405
#4: 2015-10-09 22:21:33 ЛС | профиль | цитата
Jonson писал(а):
Допустим класс моей формы называется Form1. Хочу сменить это название на абсолютно любое,не обязательно прямо при выполнении программы

Jonson писал(а):
главное просто поменять класс

Jonson, если серьёзно то при выполнении программы сменить имя класса окна невозможно в принципе, а второе возможно но необходимо знать где в коде "зашито имя класса окна", напрямую через элементы изменить нельзя.
карма: 3

0
Ответов: 1926
Рейтинг: 172
#5: 2015-10-09 22:55:00 ЛС | профиль | цитата
MAV писал(а):
где в коде "зашито имя класса окна"

Интуиция подсказывает, что в кодогенераторе (CodeGen.dll) Классы типа obj_Form или obj_BUTTON.
------------ Дoбавленo в 22.55:
Jonson, а вот ещё проще - почти для любого видимого элемента:
Add(MainForm,12206003,175,154)
{
Width=364
Height=160
}
Add(Edit,6540607,434,196)
{
Left=10
Top=10
Width=215
link(Str,2616888:ClassName,[(440,184)(398,184)(398,240)(356,240)])
}
Add(WinInfo,2616888,350,196)
{
link(onWinInfo,6540607:doText,[])
link(Handle,11264525:Handle,[])
}
Add(MouseEvent,11264525,336,147)
{
Point(Handle)
}
Add(Timer,5432451,301,196)
{
Interval=50
link(onTimer,2616888:doWinInfo,[])
}
Add(Label,9761367,182,245)
{
Left=5
Top=40
}
Add(CheckBox,12734219,70,42)
{
Left=75
Top=40
}
Add(RadioButton,14476405,70,70)
{
Left=70
Top=70
}
Add(Button,10632441,175,42)
{
Left=175
Top=40
}
Add(ListBox,13560533,168,77)
{
Left=165
Top=65
Width=65
Height=65
}
Add(DatePicker,14098546,266,70)
{
Left=245
Top=70
Width=95
Height=21
}


карма: 9
0
Ответов: 58
Рейтинг: 1
#6: 2015-10-09 23:11:38 ЛС | профиль | цитата
Спасибо всем
карма: 0

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#7: 2015-10-10 00:11:02 ЛС | профиль | цитата
3042 писал(а):
Интуиция подсказывает, что в кодогенераторе

В KOL-е

function TControl.get_ClassName: String;
begin
if not fCtlClsNameChg then
Result := 'obj_' + fControlClassName
else
Result := fControlClassName;
end;
------------ Дoбавленo в 23.58:
MAV писал(а):
напрямую через элементы изменить нельзя.

Для программ HiAsm-а, использующих KOL можно, если применить IC
------------ Дoбавленo в 00.11:
Не, к сожалению не срабатывает, срабатывает только при создании контрола. Но если вы создаете свой контрол, то в секции INIT можете использовать Control.SubClassName. Это свойство контрола назначит контролу назначенное имя, отличное от obj_XXX
карма: 22

1
Голосовали:MAV
Ответов: 1926
Рейтинг: 172
#8: 2015-10-10 00:41:48 ЛС | профиль | цитата
[flood]Сломалась интуиция... Пора в ремонт. [/flood]
карма: 9
0
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)