Работа нескольких форм VCH с одной записью в .dbt
0 (0)
Работа нескольких форм VCH с одной записью в .dbt ( Andrew01 20.02.2015 09:55 )
5(1)Здравствуйте!
Собственно сабж.
Как получить выбранную запись в VCH форму?
Более наглядно
http://i60.fastpic.ru/big/2015/0220/44/fbd9198c1eac143eada00851b04eb844.jpg
кто то это реализовывал?
>> ОтветитьНепонятна суть проблемы. ( LeonL 20.02.2015 10:04 )
5(1)Создаешь форма отображаешь запись, вопрос в чем?
>> Ответитьесть база данных, отображается записи все в Form 1 ( Andrew01 20.02.2015 10:18 )
5(1)выбираешь одну любую запись и нажимаешь Enter, выскакивает Form 2 с компонентом Edit0 и там чтобы была запись выбранной позиции.
как эту связку реализовать?
>> ОтветитьЭлементарно, берешь vch.mac и смотришь что и как ( LeonL 20.02.2015 11:29 )
5(1)[code] Например так.
class (TForm) ddd
....
macro OnKeyDown(keyCode)
if (keyCode == kbEnter )
sav_pos=Grid.SavePos();
fm = TFormParamdEdit( Grid.dbfile.rec.ContractNumber
Grid.RestorePos();
...
>> ОтветитьНа Grid0.savepos (); ругается, что такой функции нет. ( Andrew01 20.02.2015 12:13 )
5(1)в VCH 1.11 тоже такой функции не нашел.
import VCH; class (TGrid) TGrid0( pCompName, pTop, pLeft, pRight, pBottom ) initTGrid( pCompName, pTop, pLeft, pRight, pBottom ); SetFile( "k_inkass.dbt", "R" ,"..\\OBJ\\nkomun.def"); AddField( TField( "Date_p", TFld_String, "Дата", 10 ) ); AddField( TField( "Num_Inc", TFld_String, "Номер", 10 ) ); end; class (TForm) TForm1 Var sav_pos, Grid0 = TGrid0("Grid0", 0, 0, 28, 14), Edit0 = TEdit("Edit0", 33, 1, 53), EDIT1 = TEdit("EDIT1", 33, 3, 53), EDIT2 = TEdit("EDIT2", 33, 5, 53), EDIT3 = TEdit("EDIT3", 33, 7, 53); MACRO OnKeyDown(KeyCode) if (KeyCode == kbf2) sav_pos = Grid0.SavePos(); ExecMacroFile("..\\MAC1\\NBKI\\test222.mac"); end; END; initTForm( 10, 3, 70, 20 ); Title = "Тестовая форма"; ComponentInsert(Grid0); .............................................
import VCH; class (TForm) TForm2 Var Grid0 = TGrid0("Grid0", 0, 0, 28, 14), Edit0 = TEdit("Edit0", 2, 1, 22), EDIT1 = TEdit("EDIT1", 2, 3, 22), EDIT2 = TEdit("EDIT2", 2, 5, 22); ....................................................
Наверное проблематично с одной формы, переключаться на другую с сохранением данных?
>> ОтветитьSavePos RestorePos у Grid ( LeonL 20.02.2015 12:18 )
5(1)В чем проблематика? они же не парралельно работают, вызов формы происходит внутри другой формы.
Фигня все это.
/* by TLL */ macro SavePos() var sav_pos; sav_pos = dbfile.GetPos(); if ( Pos[cur_y] ) dbfile.GetDirect( Pos[cur_y] ); end; return sav_pos; end; /* by TLL */ macro RestorePos (sav_pos) if (sav_pos) dbfile.GetDirect(sav_pos); end; OnError(er); END;
>> ОтветитьСохраняет позицию, в той же форме, но из другой формы sav_pos = Undefined ( Andrew01 20.02.2015 12:46 )
5(1)Ниче не понял, у каждого грида есть dbfile у каждого TBFile есть GetDirect ( LeonL 20.02.2015 13:34 )
5(1)Получай и сохраняй, или давай весь код, а так это разговор слепого с глухим.
>> Ответитьотправил Вам на email ( Andrew01 24.02.2015 08:12 )
5(1)Not specified
>> ОтветитьНу теперь поподробнее что именно не получилось сделать? ( LeonL 24.02.2015 09:20 )
5(1)Что должно происходить при нажатии какой кнопки в каком макросе и форме?
>> ОтветитьЗапускаем главный макрос kremain.mac ( Andrew01 24.02.2015 09:36 )
5(1)уже в базе данных есть одна запись "номер заявки URFC3DB08283B4", это отображается в GRID0, по клавише enter открывает окно
(запуск макроса kreformyr.mac) и вот там должна быть запись "номер заявки URFC3DB08283B4" с базы данных, а как форму привязать к базе данных не ясно, чтобы отображалось на форме kreformyr.mac.
>> ОтветитьЕсть маленький пример, как это реализовано, то что надо, но ... ( Andrew01 24.02.2015 10:56 )
5(1)там все через буфер обмена и вызов макрофайлов не происходит, т.е. все в одном макросе крутится.
если писать мой проект в одном макросе, то 5000 строк получится, а то и больше, да и запутаться не долго. Поэтому решил разбить на макрофайлы, через вызов ExecMacroFile(dir + "\\макрос.mac");
Правильно ли делаю... ???
>> ОтветитьНапример так ( deusex 24.02.2015 11:08 )
5(1)class (TForm) TKreMain MACRO OnKeyDown( keyCode ) if (KeyCode == kbEnter) pos=Grid0.SavePos или раскрыть согласно предудущим постам fm=TMainForm ( Grid0 ); например так и там его считать TMainForm.ShowModal() Grid0.RestorePos(pos); ....
>> ОтветитьВыдает ошибку, если делаю import "..\\Mac1\\***\\NBKI\\kreformyr.mac" ( Andrew01 24.02.2015 11:42 )
5(1)Так ошибку выдает или что? ( deusex 24.02.2015 14:29 )
5(1)если ошибку то разберись с иерархией и импортами, формы все загни в макросы типа form1_class.mac и импортируй один раз в стартовом макросе.
Можно конечно и через execmacro но это не по пацански, и придется getpos передавать для позиционирования.
>> ОтветитьСпасибо за подсказку, кажется начинаю понимать где я не прав. ( Andrew01 24.02.2015 14:58 )
5(1)В общем придется один макрос делать или одну большую подключающуюся к макросам библиотеку, то что я не хотел.
по другому сделать не вариант пока, опыта маловато будет.
>> ОтветитьМожет кто на простом примере показать, как передается переменная из одной формы, в другую на VCH? ( Andrew01 25.02.2015 10:44 )
5(1)какие используются методы?
P.S. что то башка уже не варит.
import Vch; class (TGrid) TGrid0( pCompName, pTop, pLeft, pRight, pBottom ) initTGrid( pCompName, pTop, pLeft, pRight, pBottom ); SetFile( "k_inkass.dbt", "R" ,"..\\OBJ\\nkomun.def"); AddField( TField( "Date_p", TFld_String, "Дата", 10 ) ); AddField( TField( "Num_Inc", TFld_String, "Номер", 10 ) ); /* by TLL */ macro SavePos() var sav_pos; sav_pos = dbfile.GetPos(); if ( Pos[cur_y] ) dbfile.GetDirect( Pos[cur_y] ); end; return sav_pos; end; /* by TLL */ macro RestorePos (sav_pos) if (sav_pos) dbfile.GetDirect(sav_pos); end; OnError(er); END; end; class (TForm) TForm2 Var // Grid0 = TGrid0("Grid0", 0, 0, 28, 14), Edit0 = TEdit("Edit0", 2, 1, 22), EDIT1 = TEdit("EDIT1", 2, 3, 22), EDIT2 = TEdit("EDIT2", 2, 5, 22); // grid0.restorepos(); // msgbox(grid0.restorepos()); // msgbox(grid0.restorepos()); MACRO OnShutDown return true; END; MACRO OnCreate END; MACRO OnShow END; MACRO OnKeyDown( keyCode ) if (keycode == kbEnter) end; END; MACRO OnShiftKeyDown( ShiftKeys ) END; initTForm( 23, 4, 48, 12 ); Title = "test"; ComponentInsert(Edit0); Edit0.Color = Black; Edit0.BkGrColor = DarkGray; Edit0.SelColor = Black; Edit0.SelBkGrColor = White; Edit0.FcBkGrColor = White; // Edit0.ReadOnly = true; ComponentInsert(EDIT1); EDIT1.Color = Black; EDIT1.BkGrColor = DarkGray; EDIT1.SelColor = Black; EDIT1.SelBkGrColor = White; EDIT1.FcBkGrColor = White; // EDIT1.ReadOnly = true; ComponentInsert(EDIT2); EDIT2.Color = Black; EDIT2.BkGrColor = DarkGray; EDIT2.SelColor = Black; EDIT2.SelBkGrColor = White; EDIT2.FcBkGrColor = White; // EDIT2.ReadOnly = true; end; class (TForm) TForm1 Var sav_pos, fm, Grid0 = TGrid0("Grid0", 0, 0, 28, 14), Edit0 = TEdit("Edit0", 33, 1, 53), EDIT1 = TEdit("EDIT1", 33, 3, 53), EDIT2 = TEdit("EDIT2", 33, 5, 53), EDIT3 = TEdit("EDIT3", 33, 7, 53); MACRO OnKeyDown(KeyCode) if ((KeyCode == KbEnter)) if (Grid0.Selected) // sav_pos = Grid0.SavePos(); // msgbox(Grid0.dbfile.rec.date_p +"|"+Grid0.dbfile.rec.Num_Inc) end; end; if (KeyCode == kbf2) sav_pos = Grid0.SavePos(); // msgbox(sav_pos); // msgbox(Grid0.RestorePos(sav_pos)); fm = TForm2( Grid0 ); TForm2.Edit0.text("sdasdasd"); TForm2.ShowModal; Grid0.RestorePos(sav_pos); end; END; initTForm( 10, 3, 70, 20 ); Title = "Тестовая форма"; ComponentInsert(Grid0); ComponentInsert(Edit0); Edit0.Color = Black; Edit0.BkGrColor = DarkGray; Edit0.SelColor = Black; Edit0.SelBkGrColor = White; Edit0.FcBkGrColor = White; ComponentInsert(EDIT1); EDIT1.Color = Black; EDIT1.BkGrColor = DarkGray; EDIT1.SelColor = Black; EDIT1.SelBkGrColor = White; EDIT1.FcBkGrColor = White; ComponentInsert(EDIT2); EDIT2.Color = Black; EDIT2.BkGrColor = DarkGray; EDIT2.SelColor = Black; EDIT2.SelBkGrColor = White; EDIT2.FcBkGrColor = White; ComponentInsert(EDIT3); EDIT3.Color = Black; EDIT3.BkGrColor = DarkGray; EDIT3.SelColor = Black; EDIT3.SelBkGrColor = White; EDIT3.FcBkGrColor = White; end; /********* Начало основной процедуры *******************/ Var Form1 = TForm1; _SetEventDelay(100); Form1.ShowModal; exit( 1 ); END.
>> ОтветитьХочу смысл уловить, ни разу не получалось... сколько не бился :( ( Andrew01 25.02.2015 10:47 )
5(1)Not specified
>> ОтветитьУ TForm 2 есть параметр Grid его и инициализируй. ( deusex 25.02.2015 14:09 )
5(1)типа такого
class (...) TForm2 ( param ) init.... Grid = TGrid(...) ... SetFile(); RestorePos ( param.SavePos() ); FillTable(); END;
>> Ответитьнету, Grid только на главной форме Form 1, из формы 1 вызываются дочерние формы 2 .... n ( Andrew01 25.02.2015 15:28 )
5(1)на которых этого компонента grid'а нет, есть компоненты такие как TEdit, TDateEdit и т.д. вот в них и надо передавать значения из Grid'а
>> ОтветитьКак нету то если в коде у тебя? ( deusex 25.02.2015 15:31 )
5(1)fm = TForm2( Grid0 ); ??? Или я слепой??
>> Ответитьэто неправельный код, эксперементировал. Грид только на форме 1, ( Andrew01 25.02.2015 15:46 )
5(1)вот и прошу помощи, как сделать правильно, тыкаюсь уже неделю.... а то и больше.
вы запускали макрос?
>> ОтветитьКак я его запущю если баз нету. Все там просто и элементарно. ( deusex 25.02.2015 16:08 )
5(1)Дай доступ через TeamViewer и вместе сделаем icq:154-500-577
>> ОтветитьМой ICQ^ 31-31-31-88. Давайте тогда уже на завтра отложим. ( Andrew01 25.02.2015 16:20 )
5(1)Not specified
>> Ответить
Так ошибку выдает или что? ( deusex 24.02.2015 14:29 )
5(1)если ошибку то разберись с иерархией и импортами, формы все загни в макросы типа form1_class.mac и импортируй один раз в стартовом макросе.
Можно конечно и через execmacro но это не по пацански, и придется getpos передавать для позиционирования.
>> Ответить