Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#91: 2007-07-02 15:34:33 ЛС | профиль | цитата
Dilma писал(а):
можно проверять, а можно и нет. SubType = 0 для всех типов отличных от data_code. Обратное является ошибкой. Поэтому по большому счету проверка бессмыслена

Ну чувствую же, что ты меня дуришь
Вот схема:
code_1620.txt
Вот чего делается:
Program XXX;
{$ifdef FPC} {$APPTYPE GUI} {$endif}
{$R allres.res}

uses windows,kol;

type
TSDK_0 = object
private
frm2:PControl;
btn3:PControl;

procedure btn3_onClick(Obj:PObj);
public

end;

procedure TSDK_0.btn3_onClick;
begin
MessageBox(frm2.Handle, PChar(555), PChar('hiasm msg'), MB_OK);
MessageBox(frm2.Handle, PChar(555), PChar('hiasm msg'), MB_OK);
MessageBox(frm2.Handle, PChar(555), PChar('hiasm msg'), MB_OK);
end;

var
SDK_0:TSDK_0;

begin
with SDK_0 do begin
Applet := NewApplet('');
frm2 := NewForm(Applet,'Form');
frm2.width := 300;
frm2.height := 200;
btn3 := NewButton(frm2, 'Btn');
btn3.left := 10;
btn3.top := 10;
btn3.onClick := btn3_onClick;
Run(Applet);
end;
end.
карма: 9

0
файлы: 1code_1620.txt [726B] [473]
Администрация
Ответов: 15295
Рейтинг: 1519
#92: 2007-07-02 15:40:23 ЛС | профиль | цитата
ну и о чем мне это должно говорить Только о том, что у кнопки не проставлен выданный в поток подтип данных => ошибка разработчкиа элемента. Сказать иначе не получается ибо кодов элементов не предоставлено.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#93: 2007-07-02 15:45:32 ЛС | профиль | цитата
Что значит не поставлен
Поставлен: это константа, которую дальше и прибавить к чему-нибудь можно в Design-Time.

[size=-2]------ Добавлено в 15:45
И преобразовывать тип которой тоже нужно (как бы) в Design-Time
карма: 9

0
Ответов: 2125
Рейтинг: 159
#94: 2007-07-02 16:03:44 ЛС | профиль | цитата
Galkov писал(а):
Поставлен: это константа

У константы тоже тип есть А какого типа эта константа?

Galkov писал(а):
И преобразовывать тип которой тоже нужно (как бы) в Design-Time

Что-то не получилось у меня в FASM-е отказаться от типа data_data...
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#95: 2007-07-02 16:15:40 ЛС | профиль | цитата
сейчас встроенные типы не конвертируются. Однако если и для них вызывать _toCode, то конвертироваться и не начнут, пока там не появится соответствующая обработка

[size=-2]------ Добавлено в 16:15
tsdima писал(а):
Что-то не получилось у меня в FASM-е отказаться от типа data_data

в FTCG этот тип заменяет вариантная переменная. Посути тоже самое, просто скрыто от глаз.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#96: 2007-07-02 16:24:14 ЛС | профиль | цитата
tsdima,
1) У меня пока складывалось понимание, что если data_type<>data_code, то это константа в понимании CG и data_type и определяет ее тип.

2) А кстати не факт, что ты хорошо старался... Но, если позволять делать "все, чего угодно", может действительно не получиться. На этот случай тот же Дельфя говорит: включай библиотеку variant, и делай вид, что тебе хорошо.

Под "что угодно" я понимал примерно следующее: предствь себе, что вон там и слева перемешаны стримы с битмапами, и снизу могут спросить любого из них...
Без возможности логического "разделения по видимости" левого события из нижнего.


И мне даже кажется, что у тебя для типов-то можно было использовать многопроходность. В смысле: лепятся конверторы куда только душеньке угодно, но прикрытые очень умными if-ами, которые используют информацию "с двух сторон"

Башку сломать, конечно - запросто. Но в теории, должно бы получиться

[size=-2]------ Добавлено в 16:24
Dilma писал(а):
сейчас встроенные типы не конвертируются. Однако если и для них вызывать _toCode, то конвертироваться и не начнут, пока там не появится соответствующая обработка

Дык я именно это и имел ввиду, когда писал:
Galkov писал(а):
А вот почему в direct.inc/_toCode проверяется subType, без проверки data_type=data_code - это для меня вопрос, сегодня...


И, ясный перец, догадался я до корректировки в hiMessage:
  println('MessageBox(', isset(WIN_PARENT) ? (WIN_PARENT + '.Handle') : '0', ', PChar(', e_str(Text), '), ', 'PChar(\'hiasm msg\'), MB_OK);')[/code]
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#97: 2007-07-02 16:25:51 ЛС | профиль | цитата
Galkov писал(а):
И, ясный перец, догадался я до корректировки в hiMessage:

так это не правильно. Для временного решения сойдет, но оставлять так нельзя.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#98: 2007-07-02 16:27:08 ЛС | профиль | цитата
И от чего же это неправильно
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#99: 2007-07-02 16:49:12 ЛС | профиль | цитата
Вообще неплохо бы было наклепать элементиков под язык Object Pascal. Тогда все make_xxx в hiasm реализовать можно будет

[size=-2]------ Добавлено в 16:32
Galkov писал(а):
И от чего же это неправильно

от того, что CG сам в состояние сделать такую конвертацию.

ставим комент тут:
      if (prop <> -1) {and(fData._data_saved_.GetSubType <> data_null)} then[/code]

дописываем direct.inc\_toCode вот так:
   case toType of
     data_str:
case data.getType of
data_int: Result := MakeData(data.toStr);
end;
end;

и получаем автоматическую конвертацию констант без всяких там e_str...

[size=-2]------ Добавлено в 16:49 [/size]
вот еще одна задача, над которой надо подумать: скажем располагаю я тремя пакетами FTCG - WEB, Delphi2 и Modules. Все три пакета имеют следующие пересечения:
- WEB, Delphi2 и Modules используют элементы кодогенератора с соответствующей вкладки
- WEB и Modules - используют элементы, генерирующие код для языка javaScript
- Delphi2 и Modules - используют элементы, генерирующие код для языка Object Pascal.

т.е. получаем кучу копий одного и того же в разных пакетах. Проблема усложняется еще и тем, что копировать файлы нельзя, т.к. скажем For пакета WEB кроме реализации под JavaScript содержит еще и PHP+HTML, которые в Modules не нужны... Получаем некоторое дублирование работы...
карма: 27
0
Ответов: 9906
Рейтинг: 351
#100: 2007-07-02 16:49:27 ЛС | профиль | цитата
А опять не понял
Почему не так:
function _toCode(data:PScData; toType:byte):PScData;
begin
Result := data;
case toType of
data_str:
if data.getType <> data_code then
Result := MakeData(data.toStr)
else
case data.getSubType of
data_int:
begin
Result := MakeData('int2str(', true);
Result.AddValue(data, true);
Result.AddValue(MakeData(')', true), true);
end;
data_real:
begin
Result := MakeData('str2double(', true);
Result.AddValue(data, true);
Result.AddValue(MakeData(')', true), true);
end;
end;
...
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#101: 2007-07-02 16:59:12 ЛС | профиль | цитата
ну тогда уж так:

   case toType of
     data_str:
case data.getSubType of
...
data_null: Result := MakeData(data.toStr)
end;
...
end;
карма: 27
0
Ответов: 9906
Рейтинг: 351
#102: 2007-07-02 18:50:27 ЛС | профиль | цитата
1) Вопрос конечно интересный: кто правильней, яйцо или курица

2) А для случая, когда event есть, а property - нет
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#103: 2007-07-02 18:56:57 ЛС | профиль | цитата
2) GetTypeForPoint плюс новая идентификация типа точки - числовая. В итоге только для данных, которые всегда из потока берутся потребуется ручная конвертация
карма: 27
0
Ответов: 9906
Рейтинг: 351
#104: 2007-07-02 19:45:30 ЛС | профиль | цитата
Дык нет такой буквы в этом слове...
И не очень ясно - зачем.
Написать явное приведение типа - разве "схему" написания скриптов элемента мы для пешеходов делаем
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#105: 2007-07-02 20:42:01 ЛС | профиль | цитата
зачем писать явное приведение типов, если это можно сделать автоматом?
карма: 27
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)