Форум » GUI » Работа с флопом » Ответить

Работа с флопом

al-sklif: Задача это уже обсуждалась на форуме в разделе xHarbour - надо опередить реакцию ОС на отсутствие флопа, задавала этот вопрос Lena. Но попытка воспользоваться рецептом оказалась неудачной. На использование SetErrorMode, у меня отвечают: Unresolved external '_HB_FUN_SETERRORMODE'. Как я понял, мы работаем из разных точек отсчета: Lena использует xHarbour, а у меня сборка, которую выкладывает Филатов. Подскажите как поступить! спасибо!

Ответов - 8

Петр: Библиотека hbwin - wapi_SetErrorMode

gfilatov2002: al-sklif пишет: Подскажите как поступить Добавьте в свой проект следующую декларацию: DECLARE DLL_TYPE_LONG SetErrorMode( DLL_TYPE_LONG nMode ) ; IN KERNEL32.DLL

al-sklif: спасибо за ответ! Действительно перестал ругаться на SetErrorMode!!! Но!!! Оказалось, что ф-я isdisk() определяет только наличие включенного дисковода, но ей все равно есть дискета или нет. Попробовал использовать DISKREADY(), но как я понял это ф-я xHarbour, т.к. при билдинге из IDE он также кричит Unresolved external '_HB_FUN_DISKREADY', если же в настройках IDE переключить Harbour на xHarbour , то он не может работать с библиотечкой: Unable to open file 'MINIGUI.LIB' Подскажите! спасибо!


gfilatov2002: al-sklif пишет: Попробовал использовать DISKREADY(), Попробуй адаптировать под себя этот код (просто в качестве идеи ): *----------------------------------- FUNCTION DiskReady( cDrive , lMode ) *----------------------------------- LOCAL lReturn, cDsk, cCurDsk default( @lMode , .F. ) // lMode -> True = Windows/DOS mode. If a disk is not ready, open a dialog. // False = Bios mode. If a disk is not ready donґt open a dialog. cCurDsk := DiskName() cDsk := _Drive( cDrive ) IF valtype(lMode) != "L" lMode := .F. ENDIF IF lMode // Windows/DOS access mode. xHarbour RTL. Source is in "dirdrive.c". lReturn := DiskChange( cDsk ) IF lReturn DiskChange( cCurDsk ) ENDIF ELSE // Bios access mode. xHarbour RTL. Source is in "dirdrive.c". lReturn := IsDisk( cDsk ) ENDIF RETURN ( lReturn ) *------------------------------------ FUNCTION DiskReadyW( cDrive , lMode ) *------------------------------------ LOCAL cDsk, nHd, cFile, lReturn := .F., cCurrent := DiskName() default( @lMode , .T. ) // lMode -> Windows/DOS write ready mode. Same as DiskReady(). cDsk := _Drive(cDrive) IF valtype(lMode) != "L" lMode := .T. ENDIF IF lMode IF DiskChange( cDsk ) cFile := "wwxxyyzz.xyz" nHd := FCreate( cFile , 0 ) IF nHd > 0 FClose( nHd ) FErase( cFile ) lReturn := .T. ENDIF DiskChange( cCurrent ) ENDIF ENDIF RETURN lReturn *--------------------------------* STATIC FUNCTION _Drive( cDsk ) *--------------------------------* Local cCurDisk, cDrive cDrive := cDsk cCurDisk := DiskName() if cCurDisk[-1] != ":" cCurDisk += ":" endif if empty( cDrive ) .or. ! IsAlpha( cDrive ) cDrive := cCurDisk endif cDrive := StrTran(cDrive,"/","") cDrive := StrTran(cDrive,"\","") if cDrive[-1] != ":" cDrive += ":" endif Return cDrive

al-sklif: Спасибо! Оказалось достаточно воспользоваться DiskChange(), которая прекрасно работает из Harbour, и чувствительна к отсутствию дискеты. Одно непонятно, почему работают DiskName(), DiskChange(); а вот DISKREADY() работать не хочет. Может я чего-то не понимаю?

gfilatov2002: al-sklif пишет: Одно непонятно, почему работают DiskName(), DiskChange(); а вот DISKREADY() работать не хочет. Все просто: для этой функции в библиотеке HBCT Харбора определена заглушка, которая ничего не делает

al-sklif: За что же ее (функцию) так? Чего она плохого сделала?. А из xHarbour она работает?

PSP: al-sklif пишет: За что же ее (функцию) так? Чего она плохого сделала? Ничего она не сделала. Просто Harbour - мультиплатформенный проект. Все функции, которые в нем есть, должны работать не только под Windows.



полная версия страницы