Автор | Сообщение |
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:....
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 6819
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.09.20 17:27. Заголовок: Строю ТСБ, удаляю(ск..
Строю ТСБ, удаляю(скрываю) колонки, делаю заморозку столбцов: :nFreeze := :nColumn("TEVENT") // заморозить таблицу до этого столбца :lLockFreeze := .T. // избегать прорисовки курсора на замороженных столбцах Курсор на таблице, но нет активного ввода, нужно стрелкой вправо или Enter нажать, тогда появляется активный ввод. И ещё при движении налево, т.е. где замороженные столбцы - курсор уходит на эти столбцы, т.е. пропадает. Почему, установил же :lLockFreeze := .T. ?
| |
|
Haz
|
| |
Пост N: 1599
Зарегистрирован: 20.02.11
|
|
Отправлено: 21.09.20 18:23. Заголовок: Andrey пишет: И ещё..
Andrey пишет: цитата: | И ещё при движении налево, т.е. где замороженные столбцы - курсор уходит на эти столбцы, т.е. пропадает. Почему, установил же :lLockFreeze := .T. ? |
| проверил на последней сборке все работает , ищи у себя ошибку Andrey пишет: цитата: | Курсор на таблице, но нет активного ввода, |
| ху из активный ввод ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6820
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.09.20 19:03. Заголовок: Haz пишет: ху из ак..
Haz пишет: Вот это, активный курсор для ввода: При построении ТСБ надо ENTER нажать, только тогда появляется активный ввод.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3372
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.09.20 19:07. Заголовок: Andrey Что бы не бы..
Andrey Что бы не было разных непоняток, можно делать так (на базе примера Tsb_MoreFields\demo.prg) Скрытый текст
#include "hmg.ch" #include "TSBrowse.ch" REQUEST DBFCDX function Main() field FIRST,LAST,STREET,CITY,STATE,ZIP,HIREDATE,MARRIED,AGE,SALARY field FIRST2,LAST2,STREET2,CITY2,STATE2,ZIP2,HIREDATE2,MARRIED2,AGE2,SALARY2 field FIRST3,LAST3,STREET3,CITY3,STATE3,ZIP3,HIREDATE3,MARRIED3,AGE3,SALARY3 field FIRST4,LAST4,STREET4,CITY4,STATE4,ZIP4,HIREDATE4,MARRIED4,AGE4,SALARY4 field FIRST5,LAST5,STREET5,CITY5,STATE5,ZIP5,HIREDATE5,MARRIED5,AGE5,SALARY5 field FIRST6,LAST6,STREET6,CITY6,STATE6,ZIP6,HIREDATE6,MARRIED6,AGE6,SALARY6 field FIRST7,LAST7,STREET7,CITY7,STATE7,ZIP7,HIREDATE7,MARRIED7,AGE7,SALARY7 field FIRST8,LAST8,STREET8,CITY8,STATE8,ZIP8,HIREDATE8,MARRIED8,AGE8,SALARY8 local obrw, aStruct, cCust, cmiln, n, nLen, a, i, c cCust := "customer.dbf" cmiln := "custmiln.dbf" SET OOP ON if File( cmiln ) USE ( cmiln ) NEW ALIAS "CUST" VIA "DBFCDX" else aStruct := hmg_DBfSTRUCT( cCust ) ASize( aStruct, Len( aStruct ) - 1 ) nLen := Len( aStruct ) for i := 2 to 8 c := Str( i, 1, 0 ) for n := 2 to nLen a := AClone( aStruct[ n ] ) a[ 1 ] += c AAdd( aStruct, a ) next next DBCREATE( cmiln, aStruct, "DBFCDX", .t., "CUST" ) for n := 1 to 20 //2000 APPEND FROM customer.dbf ; FIELDS FIRST,LAST,STREET,CITY,STATE,ZIP,HIREDATE,MARRIED,AGE,SALARY next GO TOP REPLACE ALL FIRST2 WITH FIRST, LAST2 WITH LAST, CITY2 WITH CITY, STATE2 WITH STATE, ; ZIP2 WITH ZIP, HIREDATE2 WITH HIREDATE, MARRIED2 WITH MARRIED, ; AGE2 WITH AGE, SALARY2 WITH SALARY REPLACE ALL FIRST3 WITH FIRST, LAST3 WITH LAST, CITY3 WITH CITY, STATE3 WITH STATE, ; ZIP3 WITH ZIP, HIREDATE3 WITH HIREDATE, MARRIED3 WITH MARRIED, ; AGE3 WITH AGE, SALARY3 WITH SALARY REPLACE ALL FIRST4 WITH FIRST, LAST4 WITH LAST, CITY4 WITH CITY, STATE4 WITH STATE, ; ZIP4 WITH ZIP, HIREDATE4 WITH HIREDATE, MARRIED4 WITH MARRIED, ; AGE4 WITH AGE, SALARY4 WITH SALARY REPLACE ALL FIRST5 WITH FIRST, LAST5 WITH LAST, CITY5 WITH CITY, STATE5 WITH STATE, ; ZIP5 WITH ZIP, HIREDATE5 WITH HIREDATE, MARRIED5 WITH MARRIED, ; AGE5 WITH AGE, SALARY5 WITH SALARY REPLACE ALL FIRST6 WITH FIRST, LAST6 WITH LAST, CITY6 WITH CITY, STATE6 WITH STATE, ; ZIP6 WITH ZIP, HIREDATE6 WITH HIREDATE, MARRIED6 WITH MARRIED, ; AGE6 WITH AGE, SALARY6 WITH SALARY REPLACE ALL FIRST7 WITH FIRST, LAST7 WITH LAST, CITY7 WITH CITY, STATE7 WITH STATE, ; ZIP7 WITH ZIP, HIREDATE7 WITH HIREDATE, MARRIED7 WITH MARRIED, ; AGE7 WITH AGE, SALARY7 WITH SALARY REPLACE ALL FIRST8 WITH FIRST, LAST8 WITH LAST, CITY8 WITH CITY, STATE8 WITH STATE, ; ZIP8 WITH ZIP, HIREDATE8 WITH HIREDATE, MARRIED8 WITH MARRIED, ; AGE8 WITH AGE, SALARY8 WITH SALARY GO TOP endif SET DELETE ON DEFINE WINDOW win_1 AT 0, 0 WIDTH 1004 HEIGHT 541 ; MAIN TITLE hb_ntos( LastRec() ) + " Records: 81 Fields: Record Lenght: 1061" NOMAXIMIZE NOSIZE DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 8,36 IMAGESIZE 24,24 FLAT BORDER BUTTON TOP_1 ; PICTURE "res\go_first.bmp" ; TOOLTIP "Top" ; ACTION ( oBrw:GoTop(), oBrw:SetFocus() ) BUTTON PREV_1 ; PICTURE "res\go_prev.bmp" ; TOOLTIP "Up" ; ACTION ( oBrw:GoUp(), oBrw:SetFocus() ) BUTTON DOWN_1 ; PICTURE "res\go_next.bmp" ; TOOLTIP "Down" ; ACTION ( oBrw:GoDown(), oBrw:SetFocus() ) BUTTON BOTTOM_1 ; PICTURE "res\go_last.bmp" ; TOOLTIP "Bottom" ; ACTION ( oBrw:GoBottom(), oBrw:SetFocus() ) SEPARATOR BUTTON NEW_1 ; PICTURE "res\frm_new.bmp" ; TOOLTIP "Add" ; ACTION ( ( oBrw:cAlias )->( dbAppend() ), oBrw:GoToRec( ( oBrw:cAlias )->( RecNo() ), .T. ), oBrw:SetFocus() ) BUTTON EDIT_1 ; PICTURE "res\frm_edit.bmp" ; TOOLTIP "Edit" ; ACTION ( oBrw:PostMsg( WM_KEYDOWN, VK_F10, 0 ), oBrw:SetFocus() ) BUTTON DELETE_1 ; PICTURE "res\frm_delete.bmp" ; TOOLTIP "Delete" ; ACTION ( iif( MsgYesNo( "Delete Record ?", , .T. ), oBrw:DeleteRow(), NIL ), oBrw:SetFocus() ) SEPARATOR BUTTON PRINT_1 ; PICTURE "res\frm_print.bmp" ; TOOLTIP "Report" ; ACTION PrintData( oBrw ) SEPARATOR BUTTON EXIT_1 ; PICTURE "res\frm_exit.bmp" ; TOOLTIP "Exit" ; ACTION Win_1.Release END TOOLBAR DEFINE TBROWSE obrw AT 56, 20 ; CELLED SELECTOR "res\pointer.bmp" ; COLORS CLR_BLACK, CLR_WHITE, CLR_BLACK, { RGB( 231, 242, 255 ), GetSysColor( COLOR_GRADIENTINACTIVECAPTION ) } ; ALIAS "CUST" ; WIDTH win_1.Width - 40 - GetBorderWidth() / 2 HEIGHT 420 ; FONT "Arial" ; SIZE 9 ; ON INIT {|ob| TsbCreate( ob, .T. ) } :Cargo := oKeyData() END TBROWSE ON END {|ob| TsbCreate( ob, .F. ) } obrw:Cargo:aColumns := AClone( obrw:aColumns ) ON KEY CONTROL+1 ACTION _wPost(1, , "1") ON KEY CONTROL+2 ACTION _wPost(1, , "2") ON KEY CONTROL+3 ACTION _wPost(1, , "3") ON KEY CONTROL+4 ACTION _wPost(1, , "4") ON KEY CONTROL+5 ACTION _wPost(1, , "5") ON KEY CONTROL+6 ACTION _wPost(1, , "6") ON KEY CONTROL+7 ACTION _wPost(1, , "7") ON KEY CONTROL+8 ACTION _wPost(1, , "8") ON KEY CONTROL+0 ACTION _wPost(1, , "0") (This.Object):Event( 1, {|ow,ky,cn| Local ob := This.obrw.Object Local ac := ob:Cargo:aColumns, ni, oc Local aCols := {} ky := val(cn) FOR ni := 1 TO Len(ac) oc := ac[ ni ] If ni == 1 AAdd(aCols, ac[ ni ]) ElseIf ky == 0 AAdd(aCols, ac[ ni ]) ElseIf ky == 1 If val( right(oc:cName, 1) ) == 0 AAdd(aCols, ac[ ni ]) EndIf ElseIf right(oc:cName, 1) == cn AAdd(aCols, ac[ ni ]) EndIf NEXT ob:aColumns := aCols ob:nRowPos := 1 ob:nCell := 2 ob:Reset() Return Nil } ) END WINDOW CENTER WINDOW win_1 ACTIVATE WINDOW win_1 return nil *---------------------------------------- STATIC PROCEDURE TsbCreate( obrw, lInit ) *---------------------------------------- local aStruct, cCust, n, nLen, a, i, c local aFields IF lInit cCust := "customer" aStruct := hmg_DBfSTRUCT( cCust ) ASize( aStruct, Len( aStruct ) - 1 ) nLen := Len( aStruct ) for i := 2 to 8 c := Str( i, 1, 0 ) for n := 2 to nLen a := AClone( aStruct[ n ] ) a[ 1 ] += c AAdd( aStruct, a ) next next // initial columns aFields := {} for n := 1 to Len( aStruct ) a := aStruct[ n ][ 1 ] AAdd( aFields, a ) next LoadFields( "oBrw", "win_1", .T., aFields ) with object oBrw :nHeightCell += 5 :nHeightHead := oBrw:nHeightCell :SetColor( { 5 }, { CLR_WHITE } ) :SetColor( { 6 }, { RGB( 0, 0, 128 ) } ) :aColumns[ 1 ]:cPicture := "99,999,999" :aColumns[ 1 ]:lEdit := .F. :SetAppendMode( .F. ) :SetDeleteMode( .T., .F. ) :lNoResetPos := .T. :lNoMoveCols := .T. :lNoKeyChar := .T. :lNoChangeOrd := .T. :nFireKey := VK_F10 // default Edit key end object ELSE obrw:SetNoHoles() obrw:SetFocus() ENDIF RETURN *--------------------------------- STATIC PROCEDURE PrintData( oBrw ) *--------------------------------- LOCAL aStruct, cCust, n, nLen, a LOCAL PrevRec LOCAL aHdr := {} LOCAL aLen := {} LOCAL aHdr1 LOCAL aTot LOCAL aFmt cCust := "customer" aStruct := hmg_DBfSTRUCT( cCust ) ASize( aStruct, Len( aStruct ) - 1 ) nLen := Len( aStruct ) for n := 2 to nLen a := AClone( aStruct[ n ] ) AAdd( aHdr, a[1] ) AAdd( aLen, a[3] ) next aHdr1 := Array( Len( aHdr ) ) aTot := Array( Len( aHdr ) ) aFmt := Array( Len( aHdr ) ) AFill( aHdr1, '' ) AFill( aTot, .F. ) AFill( aFmt, '' ) PrevRec := ( oBrw:cAlias )->( RecNo() ) ( oBrw:cAlias )->( dbGoTop() ) DO REPORT ; TITLE Upper( cCust ) + ' Database List' ; HEADERS aHdr1, aHdr ; FIELDS aHdr ; WIDTHS aLen ; TOTALS aTot ; NFORMATS aFmt ; WORKAREA &( oBrw:cAlias ) ; LMARGIN 3 ; TMARGIN 3 ; PAPERSIZE DMPAPER_A4 ; PREVIEW ( oBrw:cAlias )->( dbGoto( PrevRec ) ) RETURN
| Всегда будут только нужные столбцы в колонках тсб. Клавиши Ctrl+1,...,Ctrl+8,Ctrl+0 меняют список колонок в просмотре от имени колонки oCol:cName
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3373
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.09.20 19:13. Заголовок: Andrey пишет При пос..
Andrey пишет цитата: | При построении ТСБ надо ENTER нажать, только тогда появляется активный ввод. |
| А добавить oBrw:SetFocus() // можно добавить oBrw:GoPos(1, oBrw:nFreeze+1) oBrw:DrawSelect()
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6821
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.09.20 19:37. Заголовок: SergKis пишет: А до..
SergKis пишет: цитата: | А добавить oBrw:SetFocus() // можно добавить oBrw:GoPos(1, oBrw:nFreeze+1) oBrw:DrawSelect() |
| Это не спасает, попробовал. Попробовал убрать скрытие столбцов в таблице, активный курсор появляется и передвижение на замороженные столбцы прекращается. Что-то с удалением/скрытием столбцов - ломается алгоритм движения курсора... Я с этим уже раз 5 сталкиваюсь, думал что-то я сам нахимичил, а это не я... Удаляю столбцы вот так: oBrw:HideColumns( {1,2,3,4,5,12,18..} ,.t.) // скрыть колонки
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3374
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.09.20 20:32. Заголовок: Andrey пишет Я с эти..
Andrey пишет цитата: | Я с этим уже раз 5 сталкиваюсь, думал что-то я сам нахимичил, а это не я... Удаляю столбцы вот так: oBrw:HideColumns( (1,2,3,4,5,12,18..) ,.t.) // скрыть колонки |
| Думаю, что это ТВОЯ химия, т.к. колонок :lVisible := .F. не должно быть до :nFreeze, т.е. скрываемые колонки должны находится ПОСЛЕ :nFreeze, т.к. до :nFreeze методы :nAtCol() и :nAtActual считают все колонки безусловно видимыми
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6822
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.09.20 22:47. Заголовок: SergKis пишет: Дума..
SergKis пишет: цитата: | Думаю, что это ТВОЯ химия, т.к. колонок :lVisible := .F. не должно быть до :nFreeze |
| Есть метод скрытия колонок, я скрыл колонки которые мне нужны. Показываю ТСБ, без заморозки колонок - нет активного курсора. ............. myDelColumnTsb( oBrw, aTsbColumn ) // убрать колонки из таблицы //:nFreeze := :nColumn("TEVENT") // заморозить таблицу до этого столбца //:lLockFreeze := .T. // избегать прорисовки курсора на замороженных столбцах :GoPos(1, :nColumn("TEVENT") ) - без этого не пашет //:DrawSelect() ............ END TBROWSE ON END {|ob| ob:SetNoHoles(), ob:oPhant:nClrHeadBack := ob:Cargo:nClr4, ; ob:oPhant:nClrFootBack := ob:Cargo:nClr10,; ob:Refresh() } Т.е. убрал колонки - нужно позаботиться самому, чтобы показать активный курсор ... Блин, а я считал что ТСБ сам поставит на первую видимую колонку. Получается нет проверки, когда двигаем курсор - колонка заморожена или нет. Можно это как то проверить, чтобы курсор не улетал. Не особо это и критично, но так чтобы знать как это можно делать.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6824
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.09.20 12:18. Заголовок: Всем привет ! Есть п..
Всем привет ! Есть построенный ТСБ, в нём суперхидер из одной колонки. Как узнать - сколько букв поместится в суперхидере ? Размеры получил, а кол-во букв не могу высчитать. nWTsb := oBrw:GetAllColsWidth() // ширина всех колонок видимых hFont := oBrw:aSuperHead[ 1, 7 ] // 4-special header font If hFont != Nil aFont := GetFontParam(hFont) cFontName := aFont[1] nFontSize := aFont[2] lFontBold := aFont[3] ENDIF ? "hFont=", hFont, HB_ValToExp(aFont)
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3381
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.09.20 13:57. Заголовок: Andrey Смотри свой ..
Andrey Смотри свой же пример ButtonEx_DynamicMenu
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6825
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.09.20 15:14. Заголовок: SergKis пишет: Смот..
SergKis пишет: цитата: | Смотри свой же пример ButtonEx_DynamicMenu |
| Там другое. Возвращает максимальный размер фонта от кол-ва символов в строке. Мне нужно наоборот, от ширины шрифта и WIDTH объекта - получить максимальное кол-во символов которые влезут в WIDTH объекта.
| |
|
|
SergKis
|
| постоянный участник
|
Пост N: 3384
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.09.20 15:21. Заголовок: Andrey пишет Там дру..
Andrey пишет цитата: | Там другое. Возвращает максимальный размер фонта от кол-ва символов в строке. Мне нужно наоборот, от ширины шрифта и WIDTH объекта - получить максимальное кол-во символов которые влезут в WIDTH объекта. |
| И что там другого ? Перебираются размеры фонта для строки, а наоборот (перебрать буквы для одного фонта) ты принять не можешь, религия не позволяет или арифметика другая
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6826
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.09.20 17:00. Заголовок: SergKis пишет: рели..
SergKis пишет: цитата: | религия не позволяет или арифметика другая |
| Да вчера делал, не получилось. Сегодня по другому сделал, вроде работает... Вот так сделал - Скрытый текст // Функция вернет максимальное количество букв "Н" или другое // для заданной строки: ширина-объекта и ширина-фонта FUNCTION GetMaxChar4FontWidth( cText, nWidth, cFontName, nFontSize, lBold ) LOCAL hFont, nWText, nMaxChar DEFAULT cText := "H", lBold := .F. lBold := !Empty(lBold) hFont := InitFont( cFontName, nFontSize, lBold ) nWText := GetTextWidth ( 0, cText, hFont ) DeleteObject( hFont ) nMaxChar := INT(nWidth/nWText) RETURN nMaxChar
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3385
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.09.20 21:20. Заголовок: Andrey пишет // Функ..
Andrey пишет цитата: | // Функция вернет максимальное количество букв "Н" |
| Почему именно "H". Используют в практике 3-и буквы, если от букв прыгать, а не от конкретного текста. "A" - min длина "B" - средняя длина "W" - max длина Если у тебя регистрирован фонт SET FONT Normal ..., то ты можешь получать длину от буквы "B" автоматом nWidth := GetFontWidth("Normal", 50 /* длина в символах */) Такой алгоритм применен в Tsb_DemoMdi примере для "M" полей и длинных "C" полей. Колонка шириной oCol:ToWidth(50 /*символов*/) и EditBox встраивает текст с переносами в эти 50 символов. Если в выводе преобладают маленькие буквы, то можно еще уменьшить nWidth *= 0.8 (или даже 0.7) или увеличить вывод кол-ва символов в полученный nWidth ~ 15-20%? т.е. 50+10(15) символов.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6828
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.09.20 12:24. Заголовок: SergKis пишет: Поче..
SergKis пишет: Да не подумал сразу. Текст состоит у меня сейчас как правило только из нескольких заглавных букв. Поставил "х" и сразу стал текст в размер суперхидера попадать. Фонты уже зарегистрированны, спасибо за подсказку.
| |
|
Dr. Oldwarez
|
| постоянный участник
|
Пост N: 244
Зарегистрирован: 27.07.08
|
|
Отправлено: 09.03.21 16:41. Заголовок: Здравствуйте! Давно ..
Здравствуйте! Давно вам не писал - тут у меня личные проблемы были. И теперь вот вопрос: как открыть CSV-файл с заголовками в TsBrowse. Заголовки полей CSV можно брать в качестве заголовков TsBrowse. Есть поля текстовые, дата, время и одно длинное MEMO. Это экспортный файл из Google Calendar. Заранее благодарен
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3587
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.03.21 17:05. Заголовок: Dr. Oldwarez пишет Е..
Dr. Oldwarez пишет цитата: | Есть поля текстовые, дата, время и одно длинное MEMO |
| Пару записей показать бы. Можно dbf создавать а append from ... DELIMITED ..., но предложу через массив aBuf := hb_ATokens( hb_memoread(cFie), CRLF) aDim := {} aHdr := {} FOR nI := 1 TO Len(aBuf) IF nI == 1 // header // как заданы заголовки в "..." или без них ? FOR EACH t IN hb_AToekns(aBuf[ nI ]) ; AAdd(aHdr, t) // без NEXT ELSE AAdd(aDim, &( "{"+aBuf[ nI ]+"}" )) ENDIF NEXT Далее подать aHdr и aDim в tsb, как в примерах Tsb_array_2, например
| |
|
Dr. Oldwarez
|
| постоянный участник
|
Пост N: 245
Зарегистрирован: 27.07.08
|
|
Отправлено: 09.03.21 17:18. Заголовок: SergKis пишет: Пару..
SergKis пишет: цитата: | Пару записей показать бы. |
| Пожалуйста! Subject,Start Date,Start Time,End Date,End Time,Location,Description OLDWAREZ :Покупка компьютера,04/01/2021,10:00 AM,02/01/2021,12:30 PM,Вещевой рынок,Всего за 1500 руб. Это стандартный экспорт календаря Гугл. Subject Start Date Start Time End Date End Time Location Description Это заголовки
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3588
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.03.21 18:02. Заголовок: Dr. Oldwarez Не сов..
Dr. Oldwarez Не совсем стандартный csv по мне, но 1.принимаем в массив строковый все 2. опр. типы колонок 3. переводим данные строковые колонок по типам или показываем в тсб строковый вариант aBuf := hb_ATokens( hb_memoread(cFie), CRLF) aDim := {} aTyp := {} aLen := {} aHdr := {} FOR nI := 1 TO Len(aBuf) IF nI == 1 // header FOR EACH t IN hb_AToekns(aBuf[ nI ], ",") ; AAdd(aHdr, t) NEXT ELSE aTmp := {} FOR EACH t IN hb_AToekns(aBuf[ nI ], ",") cTyp := "C" nLen := 0 IF "/" $ t cTyp := "D" t := CtoD(t) nLen := 8 ELSEIF ":" $ t .and. " AM" $ t cMilTime := ft_Civ2Mil( t ) // " 5:40 am" 0540 t := left(cMilTime, 2)+":"+right(cMilTime, 2)+":00" nLen := len(t) ELSEIF ":" $ t .and. " PM" $ t cMilTime := ft_Civ2Mil( t ) // " 5:40 pm" 1740 t := left(cMilTime, 2)+":"+right(cMilTime, 2)+":00" nLen := len(t) ELSE nLen := len(t) ENDIF AAdd(aTmp, t) AAdd(aTyp, cTip) AAdd(aLen, nLen) NEXT ENDIF NEXT можно подавать в тсб массивы или создавть dbf и в тсб (подключать hbnf.lib ) на выбор
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3589
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.03.21 18:11. Заголовок: PS пропустил ..
PS пропустил AAdd(aLen, nLen) NEXT AAdd(aDim, aTmp) ENDIF и везде hb_ATokens(...) конечно
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|