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


Пост 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 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


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




Пост 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 
Профиль
SergKis
постоянный участник




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


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


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

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




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


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

Спасибо: 0 
Профиль
Dr. Oldwarez
постоянный участник




Пост 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 
Профиль
SergKis
постоянный участник




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


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


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

Спасибо: 0 
Профиль
Dr. Oldwarez
постоянный участник




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


SergKis пишет:

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


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

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

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




Пост 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 
Профиль
Dr. Oldwarez
постоянный участник




Пост 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 
Профиль
SergKis
постоянный участник




Пост 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 
Профиль
SergKis
постоянный участник




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


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

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




Пост 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 
Профиль
alex_II



Пост 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 
Профиль
SergKis
постоянный участник




Пост 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 
Профиль
alex_II



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


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

Спасибо: 0 
Профиль
alex_II



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


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

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




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


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

Спасибо: 1 
Профиль
alex_II



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


Спасибо

Спасибо: 0 
Профиль
alex_II



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


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

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




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


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


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

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