![]() | ![]() | Типичные вопросы [контролы] |
На этой станице помещены ответы на вопросы, которые я сам мучительно (или легко) находил, я не думаю, что ответы исчерпывающие, и если Вы найдёте, что что-нибудь дисанирует с Вашими представлениями, давайте обсудим и найдём лучшие решения... Кроме того, часто ответ может зависеть от версии как OS так и Visual FoxPro, проверить всё на всех версиях и платформах для меня просто непосильно. Изначально этот список был исключительно для VFP 5.0, в то время как сейчас это только VFP 7.0/8.0, я мог где-нибудь и пропустить упоминание о версии, и если Вы найдёте несоответствия, сообщите пожалуйста мне. |

Вопрос: Как вернуть числовое кодовое значение из ComboBox с двумя полями (символьное название, числовой код) для записи его в числовое поле таблицы, т.е. когда данные таблицы для ComboBox являются подчинёнными некоторой родительской таблицы по числовому кодовому полю? 
Вопрос: Каким образом я могу отображать подчинённое множество записей в Grid для некоторой записи в родительской таблице, если источником данных для Grid является View? 
Вопрос: Как добавить CheckBox и ComboBox в качестве отображаемых элементов столбцов в Grid? 
Вопрос: Я хотел бы по щелчку мыши на заголовке столбца Grid переустанавливать активный индекс у источника. Переустанавливать индекс получается, но я при этом теряю текущую запись. Как я должнен сделать, чтобы запись после переустановки индекса оставалась прежней? 
LOCAL lnRecNo
lnRecNo = IIF(!EOF(), RECNO(), 0)
ThisForm.DataEnvironment.cursor1.Order = "Column_Order"
*-- or SET ORDER TO TAG Column_Order
WITH This.Parent.Parent
.ActivateCell(1, .ActiveColumn)
IF lnRecNo # 0
GO (lnRecNo)
ELSE
GO TOP
ENDIF
.Refresh()
ENDWITH
См. также раздел "PRB: Incremental Search with Grid Causes Screen Flicker" в MSDNВопрос: У меня не удаляется запись в Grid, подскажите как я это должен сделать корректно. 
...
WITH ThisForm
IF VARTYPE(.ActiveControl) = "O";
AND .ActiveControl.BaseClass == "Grid";
AND !INLIST(CURSORGETPROP("Buffering"), 4, 5);
AND !.ActiveControl.DeleteMark
*-- Grid с DeleteMark = .F. и buffering record имеет проблему
*-- при удалении записи, необходимо временно
*-- установить свойство DeleteMark = .T.
LOCAL loGrid
loGrid = .ActiveControl
loGrid.DeleteMark = .T.
ENDIF
ENDWITH
lnRecNo = RECNO()
DELETE
llError = !TABLEUPDATE(.T.)
IF TYPE("loGrid") = "O"
loGrid.DeleteMark = .F.
ENDIF
...
См. также http://support.microsoft.com/kb/q191641/Вопрос: Как в объекте Grid удалить (скрыть с экрана), а позже восстановить, на прежнее место, колонку (объект Column)? При этом, необходимо чтобы при удалении колонки на ее место вставала колонка справа. 
WITH This.Parent
IF .Visible
.Visible = .F.
.Width = 0
ELSE
.Visible = .T.
.Width = 75 && -- или прежний размер
** -- из предварительно созданного свойства-массива формы
ENDIF
ENDWITH
Вопрос: Я хочу добавить данные в ComboBox, так чтобы иметь два столбца, у меня нет присоединённого источника данных, данные я хотел бы добавлять программно, но у мкня ничего не получается. Как это можно сделать? 
Вопрос: Размещаю на форме ActiveX-ный компонент ImageList. Прописываю в нём имеджы.
Размещаю на той же форме ActiveX-ный компонент Toolbar. Делаю в нём ссылку на
ImageList. Завершаю редактирование Toolbara. Открываю его снова, ссылка -
none. Что с этим делать? 
#DEFINE tbrDefault 0 #DEFINE tbrCheck 1 #DEFINE tbrButtonGroup 2 #DEFINE tbrSeparator 3 #DEFINE tbrPlaceholder 4 #DEFINE tbrDropDown 5 #DEFINE MAXBUTTONS 2 LOCAL lcCurKey, loButton, lnCntImg, lnCntBtn lnCntImg = 0 WITH ThisForm.MyToolbar1.Object .ImageList = ThisForm.MyImageList.Object WITH .Buttons FOR lnCntBtn = 1 TO MAXBUTTONS lnCntImg = lnCntImg+1 lcCurKey = SYS(2015) .Add(,lcCurKey) loButton = .Item(.Count) WITH loButton .Image = lnCntImg * ... etc ENDWITH loButton = NULL ENDFOR ENDWITH ENDWITHОбратите внимание на два момента:
Вопрос: У меня не получается обратиться к UDF в ControlSource столбца Grid в форме. 
Вопрос: Хочу показать значение memo-поля таблицы в столбце Grid, однако у меня отображается только слово Memo, а мне нужно значение. Как это можно сделать? 
Вопрос: Хочу многострочный заголовок столбцов в Grid. Что можно сделать? 
Вопрос: В приложении использую ActiveX control, создаю дискрибутив используя VFP Setup Wizard. После установки на клиенте получаю ошибку: OLE error code 0x80040112: Appropriate license for this class not found. Можно ли это как-то побороть? 
Вопрос: У меня Windows NT, пытаюсь из RichTextBox Control организовать печать, но не удаётся из CommonDialog Control получить device context hDC property, чтобы передать первому в метод SelPrint. Другими словами: можно ли вывести информацию из RichTextBox Control на печать? 
#DEFINE C_DRVNAME "winspool" DECLARE LONG CreateDC IN Gdi32.dll ; STRING @ lpszDriver, ; &&// driver name STRING @ lpszDevice, ; &&// device name STRING @ lpszOutput, ; &&// not used; should be NULL STRING @ lpInitData &&// optional printer data LOCAL nCntPrn LOCAL ARRAY laPrinters[1,2] nCntPrn = APRINTERS(laPrinters) IF nCntPrn = 0 RETURN .F. ENDIF LOCAL lcPrinter, lhDC lcPrinter = laPrinters[1,1] lhDC = CreateDC(C_DRVNAME, lcPrinter, NULL, NULL) IF lhDC = 0 RETURN .F. ENDIF ThisForm.Olecontrol1.Object.SelPrint(lhDC) CLEAR DLLSC_DRVNAME как я понял из MSDN CreateDC() для Windows 95/98 должно быть NULL в то время как у меня тоже NT, а по сему "winspool"
Вопрос: Могу ли я как-нибудь вставить Internet Explorer в форму VFP? 
#DEFINE C_URL "http://vfpdmur.narod.ru/" &&- Insert your URL here
RELEASE ox
PUBLIC ox
ox = CreateObject("MyInternetExplorer")
IF TYPE('ox') = 'O' AND !ISNULL(ox)
WITH ox
.oWeb.Navigate(C_URL,,"_self")
IF !.Visible
.Visible = .T.
ENDIF
ENDWITH
ELSE
MESSAGEBOX("Error in CreateObject('MyInternetExplorer')", 16, 'Error')
ENDIF
DEFINE CLASS MyInternetExplorer AS form
ADD OBJECT oWeb AS CWebExp
Caption = "My Internet Explorer"
PROCEDURE Init
WITH ThisForm
.Width = SYSMETRIC(21)*3/4
.Height = SYSMETRIC(22)*3/4
.Resize()
ENDWITH
ENDPROC
PROCEDURE Resize
ThisForm.oWeb.resize()
ENDPROC
ENDDEFINE
DEFINE CLASS CWebExp AS olecontrol
OleClass = "Shell.Explorer"
PROCEDURE Resize
WITH This
.Width = ThisForm.Width - 1
.Height = ThisForm.Height - 1
ENDWITH
ENDPROC
PROCEDURE Refresh
NODEFAULT
ENDPROC
ENDDEFINE
Вопрос: Нужен h-файл с определением констант для Excel 2000 Где можно взять? 
Вопрос: SelectOnEntry on MouseClick for TextBox как организовать? 
Вопрос: Не получается в ActivX Comctl2.MonthView.2 воспользоваться DayBold(), возвращает "Function argument value, type, or count is invalid (Error 11)". Можно это как-нибудь побороть? 
WITH ThisForm.Olecontrol1.Object FOR lnCnt = 1 TO 42 .DayBold(TTOC(.VisibleDays(lnCnt))) = .T. ENDFOR ENDWITH
