On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник


Пост N: 420
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)


TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений
К примеру

 цитата:

DEFINE TBROWSE oBrw2 ;
AT 60,450 ;
ALIAS cAlias ;
OF Form1 ;
WIDTH 330 ;
HEIGHT 340 ;
FONT "Verdana" ;
SIZE 9 ;
ON DBLCLICK CopyRec();
ON GOTFOCUS fModelo_Hab(2) ;
AUTOFILTER ;
CELLED EDIT;
VALUE nRec;
GRID


Здесь я собрал параметры из разных tBrows
Можно или нет и какие парметры заменить
выражением ( и каким) ?
oBrw2:....
oBrw2:....



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 289 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


постоянный участник




Пост N: 246
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 09.03.21 18:17. Заголовок: SergKis пишет: опр...


SergKis пишет:

 цитата:
опр. типы колонок



Типы колонок заранее известны, но порядок может быть разным и могут быть неиспользуемые колонки.
Используемые
Subject - текстовый
Start Date, End Date - дата (амер.).
Start Time, End Time - текстовый AMPM
Location - текстовый
Description - MEMO

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3590
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.03.21 18:30. Заголовок: Dr. Oldwarez пишет Т..


Dr. Oldwarez пишет
 цитата:
Типы колонок заранее известны, но порядок может быть разным и могут быть неиспользуемые колонки


Определите структуру для dbf заранее, если все известно, в коде выше уберите aLen, aTyp
aHdr - даст заголовки-поля по колонкам
aDim - даст данные по записям и колонкам
подайте их в тсб или обработайте и запишите в dbf

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3591
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.03.21 18:55. Заголовок: PS вместо ..


PS
вместо t := CtoD(t)
использовать можно
t := hb_CtoD(t, "mm/dd/yyyy")

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 247
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 09.03.21 19:29. Заголовок: SergKis пишет: Опре..


SergKis пишет:

 цитата:
Определите структуру для dbf заранее, если все известно, в коде выше уберите aLen, aTyp
aHdr - даст заголовки-поля по колонкам
aDim - даст данные по записям и колонкам
подайте их в тсб или обработайте и запишите в dbf



Вот так?
SET DATE AMERICAN 
aBuf := hb_ATokens( hb_memoread(GetFile({{'CSV-Datei','*.csv'}},'Wählen Sie eine CSV Import-Datei aus',;
cDatenLW,.F.,.T.)), CRLF)
aDim := {}
aTyp := {"C","D","C","C","C","M"}
aLen := {10,10,5,5,25,150}
aHdr := {}
FOR nI := 1 TO Len(aBuf)
IF nI == 1 // header
FOR EACH t IN hb_ATokens(aBuf[ nI ], ",") ; AAdd(aHdr, t)
nSubject:=ASCAN(aHdr,'Subject')
nStartDate:=ASCAN(aHdr,'Start Date')
nStartTime:=ASCAN(aHdr,'Start Time')
nEndTime:=ASCAN(aHdr,'End Time')
nLocation:=ASCAN(aHdr,'Location')
nDescription:=ASCAN(aHdr,'Description')
NEXT
ELSE
aTmp := hb_ATokens(aBuf[ nI ], ",")
NEXT
AAdd(aDim, {aTmp[nSubject],CTOD(aTmp[nStartDate]),ft_Civ2Mil(aTmp[nStartTime]),ft_Civ2Mil(aTmp[nEndTime]),;
aTmp[nLocation],aTmp[nDescription]})
ENDIF
NEXT
SET DATE GERMAN


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3592
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.03.21 19:53. Заголовок: Dr. Oldwarez пишет В..


Dr. Oldwarez пишет
 цитата:
Вот так?


Нет. Разрушили соответствие колонок aHdr и aDim
в aHdr t, т.е. все колонки с пустыми, а в aDim только нужные
по мне проще сделать массивы в полном соответствии как в файле, потом выбрать нужные по структуре
или aHdr привести через aTmp в соответствие с aDim, как на ELSE

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 248
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 09.03.21 20:51. Заголовок: SergKis пишет: Нет...


SergKis пишет:

 цитата:
Нет. Разрушили соответствие колонок aHdr и aDim


Спасибо за напоминание!
Тогда будет массив aHdr - для считывания ВСЕХ полей и aHeaders - то, что идёт в заголовки TBrowse

Спасибо за помощь.
Извините, тут одна линейка памяти сдохла, осталось совсем мало. Завтра куплю новую и продолжу.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3593
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.03.21 01:44. Заголовок: Dr. Oldwarez пишет Т..


Dr. Oldwarez пишет
 цитата:
Тогда будет массив aHdr - для считывания ВСЕХ полей и aHeaders - то, что идёт в заголовки TBrowse


Определение заголовка лучше вынести за цикл
 
aBuf := hb_ATokens( hb_memoread(GetFile({{'CSV-Datei','*.csv'}},'Wählen Sie eine CSV Import-Datei aus',;
cDatenLW,.F.,.T.)), CRLF)
aFld := {"Subject", "StartDate", "StartTime", "EndTime", "Location", "Descript"}
aTyp := {"C","D","C","C","C","M"}
aLen := {10, 10, 5, 5, 25, 10}
aDec := {0, 0, 0, 0, 0, 0}

aDim := {} ; aHdr := {}
FOR EACH t IN hb_ATokens(aBuf[ 1 ], ",") ; AAdd(aHdr, t)
NEXT
nSubject:=ASCAN(aHdr,'Subject')
nStartDate:=ASCAN(aHdr,'Start Date')
nStartTime:=ASCAN(aHdr,'Start Time')
nEndTime:=ASCAN(aHdr,'End Time')
nLocation:=ASCAN(aHdr,'Location')
nDescription:=ASCAN(aHdr,'Description')
aHead := {aHdr[nSubject],CTOD(aHdr[nStartDate]),ft_Civ2Mil(aHdr[nStartTime]),ft_Civ2Mil(aHdr[nEndTime]),;
aHdr[nLocation],aHdr[nDescription]}
FOR nI := 2 TO Len(aBuf)
aTmp := hb_ATokens(aBuf[ nI ], ",")
AAdd(aDim, {aTmp[nSubject],CTOD(aTmp[nStartDate]),ft_Civ2Mil(aTmp[nStartTime]),ft_Civ2Mil(aTmp[nEndTime]),;
aTmp[nLocation],aTmp[nDescription]})
NEXT


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 249
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 11.03.21 13:38. Заголовок: SergKis пишет: Нет...


SergKis пишет:

 цитата:
Нет. Разрушили соответствие колонок aHdr и aDim
в aHdr t, т.е. все колонки с пустыми, а в aDim только нужные
по мне проще сделать массивы в полном соответствии как в файле, потом выбрать нужные по структуре
или aHdr привести через aTmp в соответствие с aDim, как на ELSE



И вот, СРАБОТАЛО!!!
aBuf := hb_ATokens( hb_memoread(GetFile({{'CSV-Datei','*.csv'}},'Выберите файл CSV для импорта',; 
cDataDir,.F.,.T.)), CRLF)
aDim := {}
aTyp := {"C","D","C","C","C","M"}
aLen := {80,80,40,40,200,400}
aHdr := {}
aHeaders:={"Subject","Start Date", "Start Time","End Time","Location","Description"}
FOR nI := 1 TO Len(aBuf)
IF nI == 1 // header
FOR EACH t IN hb_ATokens(aBuf[ nI ], ",") ; AAdd(aHdr, t)
nSubject:=ASCAN(aHdr,'Subject')
nStartDate:=ASCAN(aHdr,'Start Date')
nStartTime:=ASCAN(aHdr,'Start Time')
nEndTime:=ASCAN(aHdr,'End Time')
nLocation:=ASCAN(aHdr,'Location')
nDescription:=ASCAN(aHdr,'Description')
NEXT
ELSE
aTmp := hb_ATokens(aBuf[ nI ], ",")
IF LEN(aTmp)>3
AADD(aDim,{;
aTmp[nSubject],;
hb_CTOD(aTmp[nStartDate],'MM/DD/YYYY'),;
LEFT(FT_CIV2MIL(aTmp[nStartTime]),2)+":"+RIGHT(FT_CIV2MIL(aTmp[nStartTime]),2),;
LEFT(FT_CIV2MIL(aTmp[nEndTime]),2)+":"+RIGHT(FT_CIV2MIL(aTmp[nEndTime]),2),;
IIF(nLocation<=LEN(aTmp),aTmp[nLocation],""),;
IIF(nDescription<=LEN(aTmp),aTmp[nDescription],"")})
ENDIF
ENDIF
NEXT


Дальше там ещё должны быть преобразования с первым полем, раскалывающие его на два поля и контроль дубликатов по полям StartDate и StartTime. Для всего этого хорошо бы конвертацию во временную таблицу - мне с таблицами веселее, чем с массивами. Перед каждым открытием эта таблица должна, естественно, очищаться ZAP.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3602
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.03.21 14:08. Заголовок: Dr. Oldwarez пишет Д..


Dr. Oldwarez пишет
 цитата:
Для всего этого хорошо бы конвертацию во временную таблицу


Делайте в таблицу (из моего примера)
 
REQUEST HB_MEMIO
aStru := {}
FOR EACH cFld, cTyp, nLen, nDec IN aFld, aTyp, aLen, aDec ; AAdd(aStru, {cFld, cTyp, nLen, nDec})
NEXT
cDbf := "mem:Test" // или ".\Test"
dbDrop(cDbf, cDbf, "DBFCDX")
dbCreate( cDbf, aStru, , .T., "TMP", , "RU1251" )
FOR EACH aTmp IN aDim
APPEND BLANK
FOR nI := 1 TO FCount()
FieldPut(nI, aTmp[ nI ] ) // aFld := {"Subject", "StartDate", "StartTime", "EndTime", "Location", "Descript"}
NEXT
NEXT
USE


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3603
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.03.21 14:11. Заголовок: PS добавить NEXT Bro..


PS
добавить
NEXT
Browse()
USE
dbDrop(cDbf, cDbf, "DBFCDX") // для mem:

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6919
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.21 17:09. Заголовок: У юзера падает прогр..


У юзера падает программа на ТСБ.
Видно мышкой так давит, что успевает несколько кликов сделать.
У меня так не получается.
Вот такая примерно ошибка:
 Called from (b)CREATEBROWSETABLE(807) in module: Source\Tbrw_table.prg  
Called from TSBROWSE:LDBLCLICK(9200) in module: h_tbrowse.prg
Called from TSBROWSE:HANDLEEVENT(9588) in module: h_tbrowse.prg
Called from EVENTS(96) in module: h_events.prg
Called from DOEVENTS(0)

Можно как то блокировать запись, чтобы повторно не срабатывала мышка ?
На ВСЕХ кнопках сделал блокировку, у юзера перестало падать по кнопкам.
Это наверное из той же серии, комп медленный, а юзер мышку давит до последнего !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1600
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.03.21 18:32. Заголовок: Andrey пишет: Это н..


Andrey пишет:

 цитата:
Это наверное из той же серии


Серия называется "Извините, а вы точно ..."

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 152
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 08.04.21 19:54. Заголовок: Споткнулся на ровном месте


Попробовал использовать следующую конструкцию на
основе информации из файла-справки:

DEFINE TBROWSE Br_sch AT h_tlbar,0 ALIAS 'sch' WIDTH w_br HEIGHT h_br BOLD CELLED
...
ADD COLUMN TO Br_sch HEADER 'Вид' SIZE w_vid ; // 3
DATA ComboWBlock(Br_sch,'kod_vid',3,{aItem,aData}) ;
ALIGN DT_CENTER, DT_CENTER ;
EDITABLE
...
Получаю: данные в колонке не отображаются и при попытке редактирования
возникает ошибка:

Error MGERROR/0 GETBOX: Initial Value or Field must be specified. Program terminated.
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from _DEFINEGETBOX(95) in module: h_getbox.prg
Called from TGETBOX:NEW(109) in module: TGetBox.prg
Called from TSBROWSE:EDIT(5637) in module: h_tbrowse.prg
Called from TSBROWSE:KEYDOWN(8661) in module: h_tbrowse.prg
Called from TSBROWSE:HANDLEEVENT(9555) in module: h_tbrowse.prg
Called from EVENTS(96) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1516) in module: h_windows.prg
Called from DATA_SCH(225) in module: Source\data_sch.prg
...

Однако если написать:

DEFINE TBROWSE Br_sch AT h_tlbar,0 ALIAS 'sch' WIDTH w_br HEIGHT h_br BOLD CELLED
...
ADD COLUMN TO Br_sch HEADER 'Вид' SIZE w_vid ; // 3
DATA nil ;
ALIGN DT_CENTER, DT_CENTER ;
EDITABLE
...
Br_sch:SetData(3,ComboWBlock(Br_sch,'kod_vid',3,{aItem,aData}))
...
Все прекрасно работает.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3710
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.04.21 21:33. Заголовок: alex_II пишет Получа..


alex_II пишет
 цитата:
Получаю: данные в колонке не отображаются и при попытке редактирования
возникает ошибка:


Вам надо добавить уточнение для колонки COMBO или COMBOBOX (попадаете на GETBOX)
ADD COLUMN TO Br_sch HEADER 'Вид' SIZE w_vid ; // 3
DATA ComboWBlock(Br_sch,'kod_vid',3,{aItem,aData}) ;
COMBOBOX ;

ALIGN DT_CENTER, DT_CENTER ;
EDITABLE

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 153
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 09.04.21 05:23. Заголовок: Спасибо за помощь..


Спасибо за помощь

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 154
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 09.04.21 07:53. Заголовок: CHECKBOX


Есть ли возможность изменить состояние чекбокса в TBROWSE клавишей Enter?
Пользователям удобнее работать на клавиатуре.
Может кто уже решил эту проблему.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3711
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.21 08:55. Заголовок: Есть ли возможность ..


Есть ли возможность изменить состояние чекбокса в TBROWSE клавишей Enter?
oBrw:lCheckBoxAllReturn := .T.

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 155
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 09.04.21 11:26. Заголовок: Спасибо..


Спасибо

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 156
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 09.04.21 18:09. Заголовок: И снова об удобстве работы


Неудобно редактировать COMBOBOX.
Тут ситуация обратная CHECKBOX'у
При работе с COMBOBOX мышью для, подтверждения выбора
необходимо нажать Enter.
Нельзя ли для этого использовать двойное нажатие ЛКМ.
Редактирование через клавиатуру устраивает.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3714
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.21 20:06. Заголовок: alex_II пишет Неудоб..


alex_II пишет
 цитата:
Неудобно редактировать COMBOBOX.


Не только это, но стрелки вверх\вниз сменят позицию значения (SET NAVIGATION EXTENDED как правило стоит)
и пользователь по привычке сделает и не заметит, а значение сменит, что было не видел ... Использую только
на формах не на тсб, откл. TABSTOP, только мышкой можно менять. На тсб исп. вариант такого же тсб, см. пример
Tsb_ListBox (много данных) или динамическое ContextMenu используйте. Примеры есть на эту тему или Андрея
спросите их у него много

Спасибо: 1 
ПрофильЦитата Ответить
Ответов - 289 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 252
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет