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




Пост N: 1929
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.11.11 21:36. Заголовок: Примеры из Минигуи -ошибки, вопросы..... (продолжение)


Всем привет.
Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ?
А заодно может и исправить и добавить новые....

Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах)
Предложение Григорию:
Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ?

Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР
--------------------------------------------------------------------------------
Harbour MiniGUI Errorlog File
Harbour MiniGUI Extended Edition 2.0.1 - 2011.09.21
--------------------------------------------------------------------------------
Date: 11/15/2011 Time: 22:13:24
Error BASE/1124 Argument error: LEFT

Called from LEFT(0)
Called from SCANSOFT(195)
Called from MAIN(84)


Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается...
Z:\MiniGUI\SAMPLES\BASIC\MsgEdit>call ..\..\..\batch\compile.bat demo /L shell32
Harbour 3.1.0dev (Rev. 17042)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'demo.prg'...
Lines 20133, Functions/Procedures 30
Generating C source output to 'demo.c'... Done.
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
demo.c:
Error E2141 demo.prg 993: Declaration syntax error
*** 1 errors in Compile ***

C compile error.



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


Haz
администратор




Пост N: 1112
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.07.17 15:20. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Примерчик бы.


да не вопрос , сейчас нарисую

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1113
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.07.17 15:38. Заголовок: Примерчик



Контекстное меню на бровсе , после исполнения открывается новое окно и пока его не закрыть меню больше не появляется


 
#include "minigui.ch"
#include "tsbrowse.ch"

#define CLR_PINK RGB( 255, 128, 128)
#define CLR_NBLUE RGB( 128, 128, 192)


Memvar oBrw1
Memvar aDatos


Procedure Main()

Public oBrw1
Public aDatos

DEFINE WINDOW Form1 ;
AT 0,0 ;
WIDTH 355 ;
HEIGHT 400 ;
TITLE "MAIN" ;
MAIN ;
FONT 'Tahoma' SIZE 10

Sample1()

END WINDOW

DEFINE CONTEXT MENU CONTROL oBrw1 OF Form1
MENUITEM 'Test Context Menu' ACTION {|| NewForm() } NAME CM_TEST
END MENU



ACTIVATE WINDOW Form1

Return

*--------------------------------------------------------------

Function Sample1()

aDatos := {}

AADD( aDatos, {"Ena ", "Art01", "Mod01", "200"} )
AADD( aDatos, {"Dyo ", "Art02", "Mod01", "200"} )
AADD( aDatos, {"Tria ", "Art03", "Mod01", "200"} )
AADD( aDatos, {"Tessera ", "Art04", "Mod01", "200"} )
AADD( aDatos, {"Pente ", "Art05", "Mod01", "200"} )
AADD( aDatos, {"Exi ", "Art06", "Mod01", "200"} )
AADD( aDatos, {"Epta ", "Art07", "Mod01", "200"} )
AADD( aDatos, {"Okto ", "Art08", "Mod01", "200"} )
AADD( aDatos, {"Ennea ", "Art09", "Mod01", "200"} )
AADD( aDatos, {"Deka ", "Art10", "Mod02", "200"} )
AADD( aDatos, {"Enteka ", "Art11", "Mod02", "200"} )
AADD( aDatos, {"Dodeka ", "Art12", "Mod02", "200"} )
AADD( aDatos, {"Dekatria ", "Art13", "Mod02", "200"} )
AADD( aDatos, {"Dekatessera ", "Art14", "Mod02", "200"} )
AADD( aDatos, {"Dekapente ", "Art15", "Mod02", "200"} )
AADD( aDatos, {"Dekaexi ", "Art16", "Mod02", "200"} )
AADD( aDatos, {"Dekaepta ", "Art17", "Mod02", "200"} )
AADD( aDatos, {"Dekaokto ", "Art18", "Mod02", "200"} )

IF !_IsControlDefined ("oBrw1", "Form1")

DEFINE TBROWSE oBrw1 ;
AT 5,5 ;
OF Form1 ;
WIDTH 330 ;
HEIGHT 345 ;
FONT "Verdana" ;
SIZE 10 ;
GRID

oBrw1:SetArray( aDatos )

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 1;
TITLE "Rubro" SIZE 120

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 2;
TITLE "Articulo" SIZE 80

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 3;
TITLE "Marca" SIZE 80

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 4;
TITLE "M" SIZE 30

oBrw1:SetColor({5,6},{CLR_WHITE,CLR_MAGENTA})
oBrw1:SetColor( { 3, 4 }, { CLR_WHITE, CLR_NBLUE } )

END TBROWSE


ENDIF

Return Nil

*--------------------------------------------------------------


Func NewForm()


DEFINE WINDOW Form2 ;
AT 5,500 ;
WIDTH 355 ;
HEIGHT 400 ;
TITLE "CHILD" ;

END WINDOW



ACTIVATE WINDOW Form2

Return


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




Пост N: 1156
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.17 16:11. Заголовок: Haz пишет: Контекст..


Haz пишет:

 цитата:
Контекстное меню на бровсе , после исполнения открывается новое окно и пока его не закрыть меню больше не появляется


Да, есть такая проблема при обычном использовании контексного меню.

Как временная мера, решил следующим образом в Вашем примере:

 #include "minigui.ch"  
#include "tsbrowse.ch"

#define CLR_PINK RGB( 255, 128, 128)
#define CLR_NBLUE RGB( 128, 128, 192)


Memvar oBrw1
Memvar aDatos

Procedure Main()

Public oBrw1
Public aDatos

DEFINE WINDOW Form1 ;
AT 0,0 ;
WIDTH 355 ;
HEIGHT 400 ;
TITLE "MAIN" ;
MAIN ;
FONT 'Tahoma' SIZE 10

Sample1()

END WINDOW

oBrw1:bRClicked := {|| CM() }

DEFINE CONTEXT MENU CONTROL oBrw1 OF Form1
MENUITEM 'Test Context Menu' ACTION {|| NewForm() } NAME CM_TEST
END MENU

ACTIVATE WINDOW Form1

Return

*--------------------------------------------------------------

Function Sample1()

aDatos := {}

AADD( aDatos, {"Ena ", "Art01", "Mod01", "200"} )
AADD( aDatos, {"Dyo ", "Art02", "Mod01", "200"} )
AADD( aDatos, {"Tria ", "Art03", "Mod01", "200"} )
AADD( aDatos, {"Tessera ", "Art04", "Mod01", "200"} )
AADD( aDatos, {"Pente ", "Art05", "Mod01", "200"} )
AADD( aDatos, {"Exi ", "Art06", "Mod01", "200"} )
AADD( aDatos, {"Epta ", "Art07", "Mod01", "200"} )
AADD( aDatos, {"Okto ", "Art08", "Mod01", "200"} )
AADD( aDatos, {"Ennea ", "Art09", "Mod01", "200"} )
AADD( aDatos, {"Deka ", "Art10", "Mod02", "200"} )
AADD( aDatos, {"Enteka ", "Art11", "Mod02", "200"} )
AADD( aDatos, {"Dodeka ", "Art12", "Mod02", "200"} )
AADD( aDatos, {"Dekatria ", "Art13", "Mod02", "200"} )
AADD( aDatos, {"Dekatessera ", "Art14", "Mod02", "200"} )
AADD( aDatos, {"Dekapente ", "Art15", "Mod02", "200"} )
AADD( aDatos, {"Dekaexi ", "Art16", "Mod02", "200"} )
AADD( aDatos, {"Dekaepta ", "Art17", "Mod02", "200"} )
AADD( aDatos, {"Dekaokto ", "Art18", "Mod02", "200"} )

IF !_IsControlDefined ("oBrw1", "Form1")

DEFINE TBROWSE oBrw1 ;
AT 5,5 ;
OF Form1 ;
WIDTH 330 ;
HEIGHT 345 ;
FONT "Verdana" ;
SIZE 10 ;
GRID

oBrw1:SetArray( aDatos )

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 1;
TITLE "Rubro" SIZE 120

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 2;
TITLE "Articulo" SIZE 80

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 3;
TITLE "Marca" SIZE 80

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 4;
TITLE "M" SIZE 30

oBrw1:SetColor({5,6},{CLR_WHITE,CLR_MAGENTA})
oBrw1:SetColor( { 3, 4 }, { CLR_WHITE, CLR_NBLUE } )

END TBROWSE

ENDIF

Return Nil

*--------------------------------------------------------------

Func NewForm()

DEFINE WINDOW Form2 ;
AT 5,500 ;
WIDTH 355 ;
HEIGHT 400 ;
TITLE "CHILD" ;
CHILD

END WINDOW

ACTIVATE WINDOW Form2

Return nil

*--------------------------------------------------------------

Func CM()

if iswindowdefined(Form2)
Form2.release
endif

Return Nil


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1114
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.07.17 17:14. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Как временная мера, решил следующим образом



Григорий,
Ну как очень временная. Пример слишком прост, а реальная работа в том чтобы протащить в системе удобное переключение между активными окнами и документами.
Пользователь наоткрывал много документов и по контексту хочу не закрывать документ , а переключится на него если он открыт. Сейчас все можно через главное меню, но там своя вложенная иерархия.
Пока буду искать выход дальше, ведь главное меню отрабатывает правильно, значит и контекст можно научить





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




Пост N: 1157
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.17 17:18. Заголовок: Haz пишет: хочу не ..


Haz пишет:

 цитата:
хочу не закрывать документ , а переключится на него если он открыт.


Тогда рекомендую сделать таким образом:
 #include "minigui.ch"  
#include "tsbrowse.ch"

#define CLR_PINK RGB( 255, 128, 128)
#define CLR_NBLUE RGB( 128, 128, 192)


Memvar oBrw1
Memvar aDatos

Procedure Main()

Public oBrw1
Public aDatos

DEFINE WINDOW Form1 ;
AT 0,0 ;
WIDTH 355 ;
HEIGHT 400 ;
TITLE "MAIN" ;
MAIN ;
FONT 'Tahoma' SIZE 10

Sample1()

END WINDOW

DEFINE WINDOW Form2 ;
AT 5,500 ;
WIDTH 355 ;
HEIGHT 400 ;
TITLE "CHILD" ;
CHILD

END WINDOW

DEFINE CONTEXT MENU CONTROL oBrw1 OF Form1
MENUITEM 'Test Context Menu' ACTION {|| NewForm() } NAME CM_TEST
END MENU

ACTIVATE WINDOW ALL

Return

*--------------------------------------------------------------

Function Sample1()

aDatos := {}

AADD( aDatos, {"Ena ", "Art01", "Mod01", "200"} )
AADD( aDatos, {"Dyo ", "Art02", "Mod01", "200"} )
AADD( aDatos, {"Tria ", "Art03", "Mod01", "200"} )
AADD( aDatos, {"Tessera ", "Art04", "Mod01", "200"} )
AADD( aDatos, {"Pente ", "Art05", "Mod01", "200"} )
AADD( aDatos, {"Exi ", "Art06", "Mod01", "200"} )
AADD( aDatos, {"Epta ", "Art07", "Mod01", "200"} )
AADD( aDatos, {"Okto ", "Art08", "Mod01", "200"} )
AADD( aDatos, {"Ennea ", "Art09", "Mod01", "200"} )
AADD( aDatos, {"Deka ", "Art10", "Mod02", "200"} )
AADD( aDatos, {"Enteka ", "Art11", "Mod02", "200"} )
AADD( aDatos, {"Dodeka ", "Art12", "Mod02", "200"} )
AADD( aDatos, {"Dekatria ", "Art13", "Mod02", "200"} )
AADD( aDatos, {"Dekatessera ", "Art14", "Mod02", "200"} )
AADD( aDatos, {"Dekapente ", "Art15", "Mod02", "200"} )
AADD( aDatos, {"Dekaexi ", "Art16", "Mod02", "200"} )
AADD( aDatos, {"Dekaepta ", "Art17", "Mod02", "200"} )
AADD( aDatos, {"Dekaokto ", "Art18", "Mod02", "200"} )

IF !_IsControlDefined ("oBrw1", "Form1")

DEFINE TBROWSE oBrw1 ;
AT 5,5 ;
OF Form1 ;
WIDTH 330 ;
HEIGHT 345 ;
FONT "Verdana" ;
SIZE 10 ;
GRID

oBrw1:SetArray( aDatos )

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 1;
TITLE "Rubro" SIZE 120

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 2;
TITLE "Articulo" SIZE 80

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 3;
TITLE "Marca" SIZE 80

ADD COLUMN TO TBROWSE oBrw1 ;
DATA ARRAY ELEMENT 4;
TITLE "M" SIZE 30

oBrw1:SetColor({5,6},{CLR_WHITE,CLR_MAGENTA})
oBrw1:SetColor( { 3, 4 }, { CLR_WHITE, CLR_NBLUE } )

END TBROWSE

ENDIF

Return Nil

*--------------------------------------------------------------

Func NewForm()

Form2.Restore
Form2.Show

Return nil


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




Пост N: 5440
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.07.17 19:43. Заголовок: Почему собираю ехе-н..


Почему собираю ехе-ник (последняя версия Минигуи) под Win8 всё отлично работает, а под ХР появляются непонятные ошибки, вплоть до того что нет объекта, типа:
Error BASE/1003 Переменная не существует: OBRWV

Где и куда копать ?


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




Пост N: 1614
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.17 22:25. Заголовок: Haz пишет Пока буду ..


Haz пишет
 цитата:
Пока буду искать выход дальше


так работает на new версии http://my-files.ru/35j2jn

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1115
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.07.17 11:01. Заголовок: Григорий: Тогда рек..


Григорий:

 цитата:
Тогда рекомендую сделать таким образом:



Григорий , спасибо за участие . К сожалению этот путь мне не годиться т.к. в контексте много пунктов , открываться может не одно окно и нужно правильно угадать куда хочет пользователь.
В том же контексте живут вызовы dbAppend(), dbDelete() , вызов полной истории изменения значений ячейки в текущем бровсе (кто что когда ) и пр.
Как идея - переделаю на вызов в своем потоке примерно так ( "гусары молчать! " (с) ) зато работает
 
MENUITEM 'Test Context Menu' ACTION {|| hb_threadDetach( hb_threadStart( HB_THREAD_INHERIT_PUBLIC, @Newform())) } NAME CM_TEST


SergKis пишет:

 цитата:
так работает на new версии


Ты волшебник , работает , правда перспектива переписи кода по всему проекту не обрадовала.
Буду переползать постепенно


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




Пост N: 1615
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.17 16:36. Заголовок: Haz пишет Буду переп..


Haz пишет
 цитата:
Буду переползать постепенно


Игорь, начни регистрировать все вызовы на Main окне (с главного меню, подменю, с окон, ...).
Потом, действительно, постепенно меняешь вызовы на oMain:PostMsg(...).
В oMain:oCargo:Set(nn, ...) под такими же номерами регистрации, можно иметь параметры для работы события и т.д.


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1116
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.07.17 21:46. Заголовок: SergKis пишет: начн..


SergKis пишет:

 цитата:
начни регистрировать все вызовы на Main окне


Спасибо. Начну понемногу. Тем более что вижу в этом только плюсы

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




Пост N: 5479
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.08.17 16:25. Заголовок: Как сделать до созда..


Как сделать до создания окна MAIN показ окна без ожидания ?
Версия МиниГуи последняя.
Пробовал так:
#include "i_hmgcompat.ch" 

Function Test_CreateDbf()
..........
SET WINDOW MAIN OFF
WAIT WINDOW "Подождите, создаю тестовую базу...." NOWAIT
//WaitWindow( "Подождите, создаю тестовую базу....", .T. ) // можно делать так везде без "i_hmgcompat.ch"

FOR nI := 1 TO ....
..........
NEXT

WAIT CLEAR
//WaitWindow() // можно делать так везде без "i_hmgcompat.ch"
.....
RETURN NIL

Программа отрабатывает нормально, НО в окне НЕТ НАДПИСИ !!!
Что ещё нужно сделать, чтобы надпись появилась ?

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


Пост N: 730
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 20.08.17 18:58. Заголовок: Я создаю окно Main, ..


Я создаю окно Main, но не показываю его NOSHOW

 цитата:
...ICON 'MAIN' MAIN NOSHOW NOMAXIMIZE ON INIT Init_Glav() ...



При инициализации Окна делаю что надо
- индексирую
- проверяю доступ к программе и тп.

А потом показываю ГЛАВНОЕ окно, если все нормально.

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




Пост N: 5480
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.08.17 19:48. Заголовок: Vlad04 пишет: Я соз..


Vlad04 пишет:

 цитата:
Я создаю окно Main, но не показываю его NOSHOW


Вопрос был другой...

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




Пост N: 5508
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.09.17 20:52. Заголовок: Пробую пере собрать ..


Пробую пере собрать исходник 2013 г.
Не хватает функции IsWindowStyle(). Где её теперь брать ?

В примере код выглядит так:
   FOR i := 1 TO Len( aLbl ) 
cLbl := aLbl[ i ][ _N ]
h := GetControlHandle( cLbl, cWnd )
lB := ! IsWindowStyle( h, WS_BORDER )
SetWindowStyle( h, WS_BORDER, lB )
DoMethod( cWnd, cLbl, "Refresh" )
NEXT


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6573
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.09.17 21:25. Заголовок: Andrey пишет: Где е..


Andrey пишет:

 цитата:
Где её теперь брать ?


Возможно это твой сырец.



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




Пост N: 5509
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.09.17 23:12. Заголовок: Dima пишет: озможно..


Dima пишет:

 цитата:
озможно это твой сырец.


Нет, мне его (код программы) Григорий давал. Было раньше в самом МиниГуи.
В версии 2.5.5
HB_FUNC( ISWINDOWSTYLE ) есть в модуле c_windows.c а в последней нет.
Что тогда можно использовать ?

Сам пример Form3color-demo.prg ниже:
Скрытый текст


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




Пост N: 1178
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.09.17 09:56. Заголовок: Andrey пишет: Что т..


Andrey пишет:

 цитата:
Что тогда можно использовать ?


Попробуй
FUNCTION IsWindowStyle( h, nStyle ) 
LOCAL nCtlStyle := GetWindowStyle( h )

RETURN( hb_bitAnd( nCtlStyle, nStyle ) != 0 )


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




Пост N: 5510
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.09.17 13:05. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Попробуй


Спасибо БОЛЬШОЕ !

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


Пост N: 731
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 06.09.17 19:04. Заголовок: Если функцию sWind..


Если функцию sWindowStyle не добавлять, а закоментировать строку

 цитата:
//lB := ! IsWindowStyle( h, WS_BORDER )


программа собирается и по внешнему виду не отличается.
Операционка Win 7

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




Пост N: 5511
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.09.17 00:53. Заголовок: Vlad04 пишет: прогр..


Vlad04 пишет:

 цитата:
программа собирается и по внешнему виду не отличается.


Там тогда у LABEL переопределить CLIENTEDGE и BORDER на лету нельзя будет....

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6574
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.09.17 09:08. Заголовок: Можно ли прицепить и..


Можно ли прицепить иконку на окно при вызове InputBox , не выдергивая
сырец и не правя его руками ?

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




Пост N: 1179
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.09.17 09:49. Заголовок: Dima пишет: Можно л..


Dima пишет:

 цитата:
Можно ли прицепить иконку на окно при вызове InputBox


Да, копай команду

 цитата:
Set Default Icon To


Рабочий пример лежит в папке samples\Basic\InputBox

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6575
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.09.17 10:03. Заголовок: gfilatov2002 Спасиб..


gfilatov2002
Спасибо !

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




Пост N: 5555
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.10.17 15:54. Заголовок: Использую для окна к..


Использую для окна команду:
SET INTERACTIVECLOSE OFF 
DEFINE WINDOW &cFormName ;
....
ON RELEASE {|| My(), как здесь дать команду INTERACTIVECLOSE в зависимости от состояния предыдущей команды }

Правилен ли будет следующий код ?
nWinClose := _HMG_InteractiveClose  
SET INTERACTIVECLOSE OFF
DEFINE WINDOW &cFormName ;
....
ON RELEASE {|| My(), IIF( nWinClose == 0, , _HMG_InteractiveClose := 1 ) }


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




Пост N: 1634
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.10.17 17:06. Заголовок: Andrey пишет Правиле..


Andrey пишет
 цитата:
Правилен ли будет следующий код ?


Если работает правильно, то правильный
 
h_events.prg
...
//**********************************************************************
CASE WM_CLOSE
//**********************************************************************
...
IF ISBLOCK ( _HMG_aFormInteractiveCloseProcedure [ i ] )

r := _DoWindowEventProcedure ( _HMG_aFormInteractiveCloseProcedure [ i ] , i , 'WINDOW_ONINTERACTIVECLOSE' )
IF ValType ( r ) == 'L' .AND. r == .F.
RETURN ( 1 )
ENDIF

ENDIF

IF lParam <> 1
SWITCH _HMG_InteractiveClose

CASE 0
MsgStop ( _HMG_MESSAGE [3] )
RETURN ( 1 )
CASE 2
IF ! MsgYesNo ( _HMG_MESSAGE [1] , _HMG_MESSAGE [2] )
RETURN ( 1 )
ENDIF
EXIT
CASE 3
IF _HMG_aFormType [ i ] == 'A'
IF ! MsgYesNo ( _HMG_MESSAGE [1] , _HMG_MESSAGE [2] )
RETURN ( 1 )
ENDIF
ENDIF

END SWITCH
ENDIF
...
IF _HMG_aFormType [ i ] == 'A'

ReleaseAllWindows()

ELSE

IF ISBLOCK( _HMG_aFormReleaseProcedure [ i ] )

_HMG_InteractiveCloseStarted := .T.
_DoWindowEventProcedure ( _HMG_aFormReleaseProcedure [ i ] , i , 'WINDOW_RELEASE' )

ENDIF
...


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




Пост N: 5556
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.10.17 18:49. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если работает правильно, то правильный


Да вроде работает !
До этого нельзя было окна другие крестиком закрывать.

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




Пост N: 5557
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.10.17 20:14. Заголовок: Как назначить на окн..


Как назначить на окно иконку из System.SystemFolder + "\shell32.dll ?

Сделал ResEdit листинг shell32dll.rc, там иконка допустим 90-я: 176 ICON "Icon_90.ico"
Пробовал сделать так:
    
LOCAL hFormIcon := ExtractIcon( System.SystemFolder + "\shell32.dll", 90 )

SET DEFAULT ICON TO "Icon_90.ico"

Но это неправильно же.
#command SET DEFAULT ICON TO <iconname>
имени иконки в ресурсах ехе-ника нет, значит подставлять бесполезно.
Можно получить только хендл иконки из shell32.dll
А как этот хендл привязать к окну ?

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




Пост N: 1186
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.17 21:01. Заголовок: Andrey пишет: Как н..


Andrey пишет:

 цитата:
Как назначить на окно иконку из System.SystemFolder + "\shell32.dll ?



Посмотри рабочий пример ниже:
Скрытый текст

Да, и с тебя - пиво

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




Пост N: 5558
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.10.17 23:37. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Посмотри рабочий пример ниже:



Что-то не собирается...
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
form_ico_dll.c:
Warning W8075 form_ico_dll.prg 302: Suspicious pointer conversion in function SaveIcon
Error E2349 form_ico_dll.prg 305: Nonportable pointer conversion in function SaveIcon
Warning W8075 form_ico_dll.prg 325: Suspicious pointer conversion in function SaveIcon
Error E2342 form_ico_dll.prg 325: Type mismatch in parameter 'nImageOffset' (wanted 'unsigned int', got 'int *') in function SaveIcon
*** 2 errors in Compile ***

Может что-то на этой странице потерялось ?

gfilatov2002 пишет:

 цитата:
Да, и с тебя - пиво


Без вопросов ! Пришлю !
Какую марку любишь ?

P.S. Нашел пример MiniGUI\SAMPLES\BASIC\ExtractIcon\demo2.prg ! Собралось !!!

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




Пост N: 5574
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.10.17 17:05. Заголовок: Всем привет. Вывожу ..


Всем привет.
Вывожу avi-файл на форму. Что-то фон avi-файла различается на разных ОС.
Как можно считать цвет фона этого avi-файла ?
Есть ли функция считывания цвета фона пикселя по выбранным координатам ?

Под Windows XP или Server 2008 показ НЕ нормальный:


Как правильно выводить avi-файл, чтобы фон окна совпадал с фоном самого avi-файл ?



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




Пост N: 1645
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.10.17 17:28. Заголовок: Andrey пишет Есть ли..


Andrey пишет
 цитата:
Есть ли функция считывания цвета фона пикселя по выбранным координатам ?


Поищи в SAMPLES GetPixel

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




Пост N: 5575
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.10.17 18:33. Заголовок: Сделал считывания пи..


Сделал считывания пикселя с формы, но фигня всё равно получается.
Возвращается фон окна, а не avi-файла.

Как получить цвет фона avi-файла ?

Сам тест здесь - https://cloud.mail.ru/public/MMg6/chzRm4boD

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1129
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.10.17 20:23. Заголовок: Andrey пишет: можно..


Andrey пишет:

 цитата:
можно подобрать


Есть системные цвета. Как выбрать есть в примерах и исходниках, в частности в твоём любимом TSB


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




Пост N: 5576
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.10.17 22:03. Заголовок: Haz пишет: Есть сис..


Haz пишет:

 цитата:
Есть системные цвета. Как выбрать есть в примерах и исходниках


Спасибо БОЛЬШОЕ !

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




Пост N: 5577
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.10.17 22:10. Заголовок: А как можно получить..


А как можно получить ширину AVI-файла ? Есть ли такая функция ?
Ну и заодно уж и высоту AVI-файла ?

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




Пост N: 1646
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.10.17 23:54. Заголовок: Andrey пишет А как м..


Andrey пишет
 цитата:
А как можно получить ширину AVI-файла ?


This.Avi_1.Width\Height не подходят ?

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




Пост N: 5578
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.10.17 11:03. Заголовок: SergKis пишет: This..


SergKis пишет:

 цитата:
This.Avi_1.Width\Height не подходят ?


Да не подходят... Они возвращают что задаёшь при построении...
Хотя размер avi-файла совершенно другой...
Вычислить размер avi-файла - это что-то.
Приходиться делать вывод на форму без TRANSPARENT, потом эту форму выводить, потом захватывать редактором Snagit, потом уж считать
размеры avi-файла и полученные цифирки вносить в свой код программы...

Нужны функции типа:
      aBmp := GetBitmapSize( _HMG_aControlBrushHandle [ i ] ) 
aBmp := GetIconSize( _HMG_aControlBrushHandle [ i ] )


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


Пост N: 1568
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 19.10.17 16:10. Заголовок: Andrey пишет: Вычис..


Andrey пишет:

 цитата:
Вычислить размер avi-файла - это что-то.
Приходиться делать вывод на форму без TRANSPARENT, потом эту форму выводить, потом захватывать редактором Snagit, потом уж считать
размеры avi-файла и полученные цифирки вносить в свой код программы



А щелкнуть правой клавишей мыши и посмотреть свойства не проще?

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




Пост N: 5579
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.10.17 18:03. Заголовок: Петр пишет: А щелкн..


Петр пишет:

 цитата:
А щелкнуть правой клавишей мыши и посмотреть свойства не проще?


Да я в Far собираю проекты. Об этом и не подумал. Спасибо за подсказку !

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




Пост N: 5581
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.10.17 17:05. Заголовок: Есть классный пример..


Есть классный пример SAMPLES\BASIC\GETFILE
А как вызвать такое же меню, только для сохранения файла ?
Самому делать такую форму - ужас сколько нужно знать...

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6617
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.10.17 17:47. Заголовок: Andrey А ты ленивый..


Andrey
А ты ленивый шо туши свет
Поиск по сырцам GETFILE , оппа нашли а там рядом живет PUFILE , возвращаемся в SAMPLES\BASIC
и обнаруживаем пример.

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




Пост N: 5582
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.10.17 17:52. Заголовок: Блин... Искал SAVE....


Блин... Искал SAVE...
Спасибо БОЛЬШОЕ Dima за наводку !

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




Пост N: 5588
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.11.17 23:35. Заголовок: Делаю небольшой прим..


Делаю небольшой пример.
Если в конце примера добавлю ещё один файл (типа так):
#include "resource_avi.prg" 

ТО пример перестаёт собираться вообще !
c:\MiniGui\BATCH\compile.bat demo4 /e /Z 
Harbour 3.2.0dev (r1710180807)
Copyright (c) 1999-2016, http://harbour-project.org/
Compiling 'demo4.prg'...
1 error
No code generated.
Compile error.

Вот такая ошибка:
C:\MiniGUI\include\miniprint.ch(14) Error E0004 MEMVAR declaration follows executable statement

Я вообще не пользуюсь miniprint ....
МиниГуи последний... Что делать ?
У меня в minigui.ch рас комментированы строки:
#ifndef _HMG_OUTLOG 
#define _HMG_OUTLOG
#endif


Если меняю в заголовке файла #include "minigui.ch" на #include "hmg.ch", то
пример собирается нормально !!!



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




Пост N: 5592
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.11.17 12:50. Заголовок: Пример SAMPLES\A..


Пример SAMPLES\Advanced\RCDataToFile\demo.prg

Если поместить в demo.rc:
1001 RCDATA "hello.exe" - файл или несколько файлов общим размеров примерно больше 750 кб то пример не собирается !!!
Вылет по ошибке:
demo.c:
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland
Fatal: Access violation. Link terminated.


Надо бы указать в самом demo.rc - что нельзя такого делать !
Или ключи можно подобрать для BCC 5.5.1
На bcc 5.8.2 такого нет.




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





Пост N: 49
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 09.11.17 08:52. Заголовок: Andrey пишет: Приме..


Andrey пишет:

 цитата:
Пример SAMPLES\Advanced\RCDataToFile\demo.prg



А у меня и ошибка ...

Application: C:\MiniGUI\SAMPLES\Advanced\RCDataToFile\demo.exe
Date: 11/09/17 Time: 09:47:39
Time from start: 0 days 0 hours 0 mins 0 secs
Error BASE/4001 Argument error: HB_PROCESSVALUE

Called from HB_PROCESSVALUE(0)
Called from MAIN(20) in module: demo.prg

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




Пост N: 5595
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.11.17 20:40. Заголовок: Проблема на Win10 дл..


Проблема на Win10 для последнего МиниГуи, на других системах всё нормально.
Вот такая ошибка появляется при запуске программы:


Если смотреть по коду Wait_Window(280) - моя функция:
 
DEFINE LABEL Message
ROW 20
COL nPictCol*2 + nPictHeight
WIDTH nMaxWidth - nPictCol*2 - nPictWidth
HEIGHT nMessHeight
VALUE cMessage
TRANSPARENT .T.
ACTION MoveActiveWindow()
OnMouseHover RC_CURSOR( "hand32" )
END LABEL // строка 280


В чём причина ошибки и как избавиться от такого ?



Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6630
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.11.17 22:28. Заголовок: Andrey пишет: Пробл..


Andrey пишет:

 цитата:
Проблема на Win10 для последнего МиниГуи, на других системах всё нормально.


Тоже заметил непонятный глюк с PageScript именно на дясятке , прога на Harbour упала без
объяснения причин.......Вероятно что то не сростается в Harbour и win10

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




Пост N: 5597
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.11.17 16:36. Заголовок: Использую объект TEX..


Использую объект TEXTBOX

       cFormat := REPL("!",35) 
@ ... TEXTBOX Text_1 ...... ;
INPUTMASK cFormat ;
....


Работает нормально.
А как мне задать формат букв и цифр без перевода в верхний регистр ?
Если ставить как в Харборе cFormat := REPL("Х",35) - то в TEXTBOX появляются ХХХХХХХХХХХХХХХХХХХХХ
В доке не совсем понятно:
InputMask String (Numeric Textbox):  
9 Displays digits
$ Displays a dollar sign in place of a leading space
* Displays an asterisk in place of a leading space
. Specifies a decimal point position
, Specifies a comma position

InputMask String (Non-Numeric Textbox):
9 Digits
A Alphabetic Characters
! Alphabetic Characters (Uppercase Conversion) and Digits
(All other characters are included in text in the position indicated by the mask)

Format String (Allowed in Numeric Textbox Only):
C: Displays CR after positive numbers
X: Displays DB after negative numbers
( : Encloses negative numbers in parentheses
E: Displays numbers in British format
N: Displays Alphabetic Characters and Digits


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6631
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.11.17 16:56. Заголовок: а пример глянуть ? C..


а пример глянуть ?
C:\MiniGUI\SAMPLES\BASIC\INPUTMASK\character2.prg

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




Пост N: 5598
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.11.17 17:25. Заголовок: Dima пишет: а приме..


Dima пишет:

 цитата:
а пример глянуть ?


Спасибо Дима !
Понял.

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




Пост N: 5599
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.11.17 04:04. Заголовок: Dima пишет: а приме..


Dima пишет:

 цитата:
а пример глянуть ?
C:\MiniGUI\SAMPLES\BASIC\INPUTMASK\character2.prg



Глянул. Нет такого шаблона/маски для ввода одновременно Lower/Upper цифр и букв кроме формата:
! Alphabetic Characters (Uppercase Conversion) and Digits

Блин, и как теперь быть ? Опять переделкой заниматься на GETBOX ?

Как мне для объекта TEXTBOX задать формат букв и цифр без перевода в верхний регистр ?
Ответ - никак, для TEXTBOX тоже устроит....

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




Пост N: 1649
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.11.17 12:18. Заголовок: Andrey пишет без пер..


Andrey пишет
 цитата:
без перевода в верхний регистр


XXXX - обеспечивает ввод как есть для текстов, а для перевода в upper\lower есть установки дополнительно.

 цитата:

// TEXTBOX

#command @ <row>, <col> TEXTBOX <name> ;
...
[ <upper: UPPERCASE> ] ;
[ <lower: LOWERCASE> ] ;
...


как бы все есть.

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




Пост N: 5600
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.11.17 17:41. Заголовок: SergKis пишет: как ..


SergKis пишет:

 цитата:
как бы все есть.



Да я уже писал об этом.
Попробуй в примере BASIC\INPUTMASK\character2.prg изменить:
		@ 110,120 TEXTBOX text_4 ; 
VALUE '' ;
INPUTMASK 'XXXXXXXXXXXX';


Получишь на экране вместо ввода строку XXXXXXXXXXXX ...

Вот и задаю вопрос:
Как мне для объекта TEXTBOX задать формат букв и цифр без перевода в верхний регистр ?




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




Пост N: 1650
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.11.17 18:41. Заголовок: Andrey пишет Как мне..


Andrey пишет
 цитата:
Как мне для объекта TEXTBOX задать формат букв и цифр без перевода в верхний регистр ?


INPUTMASK убери совсем.

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




Пост N: 5601
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.11.17 19:39. Заголовок: SergKis пишет: INPU..


SergKis пишет:

 цитата:
INPUTMASK убери совсем.



НЕ могу !!!
Мне нужно контролировать длину ввода текста в TEXTBOX !
Как это можно сделать без INPUTMASK ?

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




Пост N: 1651
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.11.17 20:18. Заголовок: Andrey пишет Как это..


Andrey пишет
 цитата:
Как это можно сделать без INPUTMASK ?


есть
[ MAXLENGTH <maxlength> ] ;
если
[ FIELD <field> ] ;
должно сработать по длине его
для
[ VALUE <value> ] ;
должно сработать по длине space(20)
пробуй.


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




Пост N: 5636
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.12.17 21:11. Заголовок: Всем привет ! Делаю..


Всем привет !

Делаю контекстное меню. Не могу получить значение выбираемого меню.
Вот код:
 
STATIC nStatRet := 0
.....
DEFINE CONTEXT MENU OF &cForm
FOR nI := 1 TO LEN(aMenuItem)
cMenu := aMenuItem[nI]
cName := "MyMenuItem" + HB_NtoS(nI)
bAction := &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' )
cImg := aMenuImg[nI]
lChk := .F.
lDis := .F.
_DefineMenuItem( cMenu, bAction, cName, cImg, lChk, lDis, , Font1 , , .F., .F. )
NEXT
SEPARATOR
MENUITEM "Выход" ACTION {|| nStatRet := 0 } FONT Font2 IMAGE aMenuImg[nLen]
END MENU

_ShowContextMenu(cForm, nY, nX, .f. ) // ПОКАЗ ВЫПАДАЕЩЕГО МЕНЮ
InkeyGui(100)

? nStatRet, VALTYPE(nStatRet)

Почему то всегда возвращает 0 ?

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




Пост N: 1671
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.12.17 22:22. Заголовок: Andrey пишет Почему ..


Andrey пишет
 цитата:
Почему то всегда возвращает 0 ?


Со времен clipper static переменные в макро не доступны.
Т.е. пиши прямо в блок кода или исп. private. Т.к. предст. код - функция, то все просто. У себя делаю
 
STATIC FUNC wMainStatusBar( nPos, oWn, nKy )
...
aMdiChild := GetWndMdiChildAll( .T. )
nItems := Len( aMdiChild )

If nItems > 0

PRIVATE nMsg := 0

aItems := {}
AEval(aMdiChild, {|ow| AAdd(aItems, { ow:Title, .T., .F., ow:GetProp('wMainMsg') }) })
AEval(aItems , {|ai,ni| aItems[ni][4] := 'm->nMsg := '+hb_ntos(ai[4]) })
// text item , image, disable, block
hb_AIns(aItems, 1, { 'WINDOWS IN OPERATION :', .F. , .T. , Nil }, .T.)
hb_AIns(aItems, 2, { '' }, .T.)

nY := oMain:ClientHeight - oMain:StatusBar:Height * nItems
nX := oMain:ClientWidth - oMain:StatusBar:Width(5) - ;
oMain:StatusBar:Width(4)
If WndContextMenu( nY, nX, aItems ) .and. m->nMsg > 0
oMain:PostMsg( m->nMsg )

EndIf

EndIf
...
там где у тебя
bAction := &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' )
добавь
If HB_ISCHAR(bAction); bAction := &( '{|| '+bAction+' }' )
Else
...
EndIf
короче писать бкдет


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




Пост N: 5637
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.12.17 07:53. Заголовок: SergKis пишет: Со в..


SergKis пишет:

 цитата:
Со времен clipper static переменные в макро не доступны.



А кто мне помогал этот код писать ?
Я и делал аналогично как в примере Tsb_composite(1.8).7z :
Скрытый текст



PRIVATE nMsg := 0
m->nMsg
А с каких пор для PRIVATE переменных можно ставить m-> ?
Я всегда ставил только для PUBLIC ....

Остановился на варианте:
   PRIVATE nMsg      
m->nMsg := 0
....
bAction := &( '{|| m->nMsg := VAL( "' + HB_NtoS(nI) + '" ) }' )
....

При PRIVATE nMsg := 0 - ошибка компиляции:
Harbour 3.2.0dev (r1711152234)
form_New.prg(340) Warning W0002 Ambiguous reference, assuming memvar 'NMSG'
No code generated.


СПАСИБО БОЛЬШОЕ !


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




Пост N: 1672
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.12.17 08:39. Заголовок: Andrey пишет А кто м..


Andrey пишет
 цитата:
А кто мне помогал этот код писать ?


1. ACTION {|| nStaticLang := 1 }
и
2. &( '{|| m->nMsg := VAL( "' + HB_NtoS(nI) + '" ) }' )
почувствуй разницу
SergKis пишет
 цитата:
пиши прямо в блок кода или исп. private


1-е прямо в коде
2-е исп. private


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




Пост N: 1673
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.12.17 08:43. Заголовок: Andrey пишет При PRI..


Andrey пишет
 цитата:
При PRIVATE nMsg := 0 - ошибка компиляции:


смени режим компиляции или пиши как требует уст. компиляции

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




Пост N: 1674
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.12.17 08:46. Заголовок: Andrey пишет А с как..


Andrey пишет
 цитата:
А с каких пор для PRIVATE переменных можно ставить m-> ?
Я всегда ставил только для PUBLIC ....


Со времен Summer 87

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3651
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.12.17 11:03. Заголовок: Andrey пишет: Делаю..


Andrey пишет:

 цитата:
Делаю контекстное меню. Не могу получить значение выбираемого меню.
Вот код:


STATIC nStatRet := 0
.....
DEFINE CONTEXT MENU OF &cForm
FOR nI := 1 TO LEN(aMenuItem)
cMenu := aMenuItem[nI]
cName := "MyMenuItem" + HB_NtoS(nI)
bAction := &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' )
cImg := aMenuImg[nI]
lChk := .F.
lDis := .F.
_DefineMenuItem( cMenu, bAction, cName, cImg, lChk, lDis, , Font1 , , .F., .F. )
NEXT
SEPARATOR
MENUITEM "Выход" ACTION {|| nStatRet := 0 } FONT Font2 IMAGE aMenuImg[nLen]
END MENU

_ShowContextMenu(cForm, nY, nX, .f. ) // ПОКАЗ ВЫПАДАЕЩЕГО МЕНЮ
InkeyGui(100)

? nStatRet, VALTYPE(nStatRet)


Почему то всегда возвращает 0 ?



Вклинюсь в вашу беседу. Маленький совет.

Вместо такого кода (я конечно понимаю, что нормальные герои всегда идут в обход, но..)

bAction := &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' )

лучше так:

bAction := GetStatBlock(nI)
...
Static func GetStatBlock(nI)
Return {|| nStatRet := nI}

Это прямой путь без всяких макросов и сомнительных конструкций через з.. Val и hb_NTOS

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




Пост N: 1675
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.12.17 11:42. Заголовок: Pasha :sm36: По м..


Pasha
По мне исп. в данном случае static переменной - лишнее.
А без макросов можно hb_macroBlock(сVal) использовать

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




Пост N: 1676
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.12.17 11:53. Заголовок: PS Если применить вм..


PS
Если применить вместо
 
cName := "MyMenuItem" + HB_NtoS(nI)
bAction := &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' )
это
cName := StrZero(nI, 3)
bAction := {|| MyContextMenu() } )
то
Static Func MyContextMenu()
Local cForm := ThisWindow.Name // _HMG_ThisFormName
Local cItem := This.Name // _HMG_ThisControlName
Local nItem := Val(cItem)
...






Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3652
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.12.17 14:05. Заголовок: Макросы, private/pub..


Макросы, private/public переменные... Это все стиль программирования, который имело смысл использовать до 1990-го года, когда появился клиппер 5
А с тех пор прошло все-таки 27 (двадцать семь, Карл!) лет.
Контекстное меню - это, как я понимаю, popup-меню.
В bAction заполняется номер выбранного пункта меню. Затем, надо полагать, в зависимости от номера выполняется какое-то действие.
Почему бы сразу не задать в bAction это действие ? Т.е., кроме массива aMenuItem с названиями элементов меню передавать еще и массив блоков кода с действиями для этих элементов меню,
или двумерный массив: имя и блок кода действие для этого элемента.
Это еще более спрямит очень уж долгий путь к нужному результату.

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




Пост N: 5638
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.12.17 23:57. Заголовок: Pasha пишет: Почему..


Pasha пишет:

 цитата:
Почему бы сразу не задать в bAction это действие ?


Это у меня функция для 3-х разных кнопок и картинке.
При выборе позиций меню, кнопки/картинки перерисовываются.
Из-за этого и не захотел дублировать одну функцию.


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




Пост N: 1677
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.12.17 11:14. Заголовок: Andrey пишет не захо..


Andrey пишет
 цитата:
не захотел дублировать одну функцию


Pasha об этом
 
...
FOR nI := 1 TO LEN(aMenuItem)
cMenu := aMenuItem[nI]
cName := "MyMenuItem" + HB_NtoS(nI)
bAction := aMenuBlock[nI] // &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' )
cImg := aMenuImg[nI]
...

передавай сразу, что выполнять из 3-х мест и дублироваться не будет.

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




Пост N: 5639
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.12.17 15:31. Заголовок: SergKis пишет: пер..


SergKis пишет:

 цитата:

передавай сразу, что выполнять из 3-х мест и дублироваться не будет.



Это не всегда удобно и необходимо.

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




Пост N: 5643
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.17 12:12. Заголовок: Сделал небольшой тес..


Сделал небольшой тест - https://cloud.mail.ru/public/74it/5ovNT4GDk
Не могу добиться смены фона на КНОПКЕ.
Что там не так делаю ?

Вот текст кода:
         @ 140, 110 BUTTONEX Button_S1 WIDTH 400 HEIGHT nFontSize*2  ; 
..........
FONTCOLOR BLACK BACKCOLOR YELLOW ;
NOHOTLIGHT NOXPSTYLE HANDCURSOR NOTABSTOP ;
On MouseHover {|| BFInvertObject({YELLOW,BLACK}) } ;
On MouseLeave {|| BFInvertObject({BLACK,YELLOW}) } ;
ACTION { || .... }


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




Пост N: 1213
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.12.17 17:16. Заголовок: Andrey пишет: Что т..


Andrey пишет:

 цитата:
Что там не так делаю ?


Убери из определения кнотки класс NOHOTLIGHT
         @ 140, 110 BUTTONEX Button_S1 WIDTH 400 HEIGHT nFontSize*2  ; 
CAPTION aDim3[nI3] SIZE nFontSize ;
FONTCOLOR BLACK BACKCOLOR YELLOW ;
/*NOHOTLIGHT*/ NOXPSTYLE HANDCURSOR NOTABSTOP ;
и все заработает

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




Пост N: 5644
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.17 17:52. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
и все заработает


Опять пролетел... А за что он хоть отвечает ?
Можно чуток подробнее про него ?

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




Пост N: 1214
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.12.17 10:50. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно чуток подробнее про него ?


Если указан класс NOHOTLIGHT, то не создается подсветка контура кнопки при наведени мыши на кнопку.

Поправил: сделал событие ON MOUSEHOVER независимым от указания класса NOHOTLIGHT для ButtonEx.

Благодарю за наводку


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




Пост N: 5645
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.12.17 12:46. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Поправил: сделал событие ON MOUSEHOVER независимым от указания класса NOHOTLIGHT для ButtonEx.


Это будет доступно в следующей версии ?

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




Пост N: 1215
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.12.17 13:27. Заголовок: Andrey пишет: Это б..


Andrey пишет:

 цитата:
Это будет доступно в следующей версии ?


Да, конечно.
Как раз сегодня подготовил первую бетку для следующей сборки

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




Пост N: 5646
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.12.17 17:06. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Как раз сегодня подготовил первую бетку для следующей сборки



Положи туда пример - Colored_Tab2. Правда его ещё доделать надо на показ/скрытие вкладок Tab.
А так этот пример очень показателен. Пока дошёл как нужно работать с Tab, очень много времени потратил.
Теперь можно на базе этого примера сразу делать большие программы.

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




Пост N: 5713
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.02.18 22:21. Заголовок: Всем привет ! Столк..


Всем привет !

Столкнулся с проблемой, не знаю как решить.
Есть у меня в программе окно, создаётся так:
   DEFINE WINDOW Form_Report           ; 
......
WINDOWTYPE STANDARD TOPMOST ;
NOMAXIMIZE NOSIZE NOSYSMENU ;
.....
DEFINE WINDOW Win_2 ;
... ;
WINDOWTYPE PANEL

..........
END WINDOW
....
hWnd := GetFormHandle('Win_2')
ON KEY PRIOR ACTION SendMessage( hWnd, WM_VSCROLL, SB_PAGEUP, 0 )
ON KEY NEXT ACTION SendMessage( hWnd, WM_VSCROLL, SB_PAGEDOWN, 0 )
ON KEY UP ACTION SendMessage( hWnd, WM_VSCROLL, SB_LINEUP, 0 )
ON KEY DOWN ACTION SendMessage( hWnd, WM_VSCROLL, SB_LINEDOWN, 0 )

END WINDOW

Окно прекрасно работает, но если открыто другое окно:
    DEFINE WINDOW &cFormName ; 
.........
WINDOWTYPE STANDARD TOPMOST ;
NOMAXIMIZE NOSIZE ;
...
DEFINE TBROWSE oBrw ;
....
END TBROWSE
....
END WINDOW

то программа падает с ошибкой:
Error MGERROR/0 Form Win_2 is not defined. Program terminated.
Called from MSGMINIGUIERROR(97) in module: h_error.prg
Called from GETFORMHANDLE(2209) in module: h_windows.prg
Called from SHOW_REPORT2(261) in module: Source\form_report.prg
Called from SHOW_REPORT(118) in module: Source\form_report.prg
Called from (b)HB_MACROBLOCK(0)


Строка 261 в SHOW_REPORT2(261) такая:
       hWnd := GetFormHandle('Win_2') 

Почему падает ? Или нужно по другому делать ?

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


Пост N: 774
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 04.02.18 20:26. Заголовок: А окно объявлено ? D..


А окно объявлено ?

 цитата:
Declare window Win_2


А почему не так

 цитата:

cFormName:='Win_2'



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




Пост N: 5714
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.02.18 13:19. Заголовок: Кажись разобрался.....


Кажись разобрался... Это еще первые мои наработки были.
Говорил же Сергей: всегда нужно объекты положить на форму и ненужные просто скрывать.
А у меня по условию - положить объект Win_2. Вот и ищет хендл несуществующего объекта.
Спасибо за участие. Пока не спросишь что то - фиг сам разберёшься !

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





Пост N: 135
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 02.03.18 13:00. Заголовок: Такая проблема обнар..


Такая проблема обнаружилась. У меня есть три программки, в каждой из них ввод данных. По отдельности все работает нормально. Начинаю их соединять вместе. В первой программе сверху кнопки:

DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 230,30 FLAT RIGHTTEXT
BUTTON UNDO ;
CAPTION 'Отменить введеное' ;
ACTION ( Refresh() )
BUTTON SAVE ;
CAPTION 'Записать и отправить' ;
ACTION ( Save(), Refresh() )
BUTTON TABLO_ON ;
CAPTION 'Включить ТАБЛО' ;
ACTION ( ToOnTablo() )
BUTTON TABLO_OFF ;
CAPTION 'Закрыть ТАБЛО' ;
ACTION ( ToExitTablo() )
BUTTON SETTINGS01 ;
CAPTION 'Настройки' ;
ACTION ( ToSettings1() )
BUTTON UPGRADE ;
CAPTION 'Обновление' ;
ACTION ( ToUpgrade() )
END TOOLBAR

Начинаю соединять программы. Кнопка Настройки вызывает другое окно, там тоже есть кнопка, вызывающее третье окно. В третьем окне очередной ввод данных. Пока их немного всё работает, но в какой-то момент времени при добавлении TEXTBOXов в это третье окно, в первом окне кнопки Настройки и Обновление перестают показываться. Т.е. сами кнопки есть, они нажимаются, работают, но надписи в них или пропадают или заменяются абракадаброй. Остальные кнопки показываются нормально.

Вот что это и как быть?

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




Пост N: 1770
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.03.18 15:04. Заголовок: rvu пишет Вот что эт..


rvu пишет
 цитата:
Вот что это и как быть?


Без примера, организации вызовов новых окон, трудно понять суть, можно только фантазировать.
Посмотрите пример APP_OOPEvens и попробуйте хотя бы новые окна создавать через сообщения.
Возможно TEXTBOX заменять на GETBOX/

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





Пост N: 136
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 02.03.18 15:17. Заголовок: SergKis пишет: Возм..


SergKis пишет:

 цитата:
Возможно TEXTBOX заменять на GETBOX




В свое время чем-то он мне не понравился.

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





Пост N: 137
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 02.03.18 15:20. Заголовок: Я попробую, конечно,..


Я попробую, конечно, разные варианты, просто, может, кто-то уже с таким сталкивался. Или есть догадки.

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




Пост N: 5746
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.03.18 21:08. Заголовок: rvu пишет: Вот что ..


rvu пишет:

 цитата:
Вот что это и как быть?


Сделать маленький и самодостаточный пример.
А на вызовы функций типа: ToOnTablo() - навесить MsgDebug() !
Тогда можно будет понять свой промах. Без этого примера, ничего не выйдет.

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





Пост N: 138
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 05.03.18 11:47. Заголовок: Andrey пишет: Сдела..


Andrey пишет:

 цитата:
Сделать маленький




Так в том и проблема, что пока программа маленькая, она работает.

Но я для себя проблему решил, просто отказался от этого тулбара, сделал свои кнопки, с ними все нормально.

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




Пост N: 5771
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.03.18 19:43. Заголовок: Пример \MiniGUI&..


Пример \MiniGUI\SAMPLES\Advanced\Tsb_filter
Добавляю строку показа клавиатуры в пример:
      DEFINE TEXTBOX Text_1 
ROW 5
COL 90
WIDTH 345
HEIGHT 21
ON CHANGE {|| RefreshBrowse()}
END TEXTBOX

@ 5, 450 LABEL Label_KB VALUE '('+KB_LANG()+')' ;
WIDTH 50 HEIGHT 21 SIZE 11 BOLD FONTCOLOR BLACK TRANSPARENT // "RUS/LAT"

Ну и добавил саму функцию KB_LANG() Скрытый текст



Как заставить правильно отображать клавиатуру находясь в TEXTBOX Text_1 ?
А то переходишь на русскую клавиатуру, внизу правильно,
а в LABEL Label_KB неправильная, пока не нажмешь любую букву.


Для TBROWSE знаю, что нужно добавить:
   // Вывод подсказки с использованием внутреннего цикла TBrowse 
oBrw:bEvents := { |a,b| MyEventBrowse(a,b) }
....

В KeyUserEdit() добавить:
      CASE nKey == 16 .OR. nKey == 17  // Shift+Alt  Shift+Ctrl  "RUS/LAT" 
SetProperty(cForm, "Label_KB", "Value", '('+KB_LANG()+')' )
lRet := .F.

И внести функцию:
STATIC FUNCTION MyEventBrowse(oBrw, nMsg)    //  "RUS/LAT" 
LOCAL cForm := oBrw:cParentWnd, cAlias := oBrw:cAlias
IF _IsControlDefined( "Label_KB", cForm ) .and. !(nMsg==WM_PAINT)
SetProperty(cForm, "Label_KB", "Value", '('+KB_LANG()+')' )
ENDIF
RETURN 0


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1210
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.03.18 22:38. Заголовок: Andrey пишет: Добав..


Andrey пишет:

 цитата:
Добавляю строку показа клавиатуры в пример:


А зачем? Пример показывает как можно обработать фильтр в бровсе и все.
Зачем все в один компот сливать? Хочется поупражняться, есть пример( или аппликуха)
LangIndicator кажется, так называется. Или сделай новый, хотя и так от tsb_***** в примерах
уже в глазах мелькает.

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6755
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.18 22:43. Заголовок: Haz пишет: LangIndi..


Haz пишет:

 цитата:
LangIndicator


Есть такой в Advanced\LANG_INDICATOR\ но у меня на семерке работает криво. На переключение раскладки
не реагирует , пока хотя бы раз не нажать в трее на этом LANG_INDICATOR


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1211
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.03.18 22:46. Заголовок: Dima пишет: На пере..


Dima пишет:

 цитата:
На переключение раскладки
не реагирует , пока хотя бы раз не нажать в трее на этом LANG_INDICATOR


Вот тем более. Есть куда приложить руку и приписать свой (с)


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6756
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.03.18 23:06. Заголовок: Haz :sm12: ..


Haz

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




Пост N: 5772
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.03.18 23:14. Заголовок: Haz пишет: А зачем?..


Haz пишет:

 цитата:
А зачем? Пример показывает как можно обработать фильтр в бровсе и все.



А чтобы понять, как заставить изменить показ клавиатуры для этого фильтра и бровса.
Пример выбран специально, чтобы потом посмотреть как это всё вместе будет работать и перенести к себе в проект.


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1212
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.03.18 00:02. Заголовок: Andrey пишет: чтобы..


Andrey пишет:

 цитата:
чтобы понять, как заставить


Так и спрашивай, как из текстбокса перехватить клаву. С бровсом я так понял проблем нет.
А то не понятно, толи ты улучшайзингом примеров занимаешься, толи конкретную свою задачу решаешь.
Текстбокс, неполноценный контрол. Замени на гетбокс. Да и способов отобразить какой язык в системе текущий можно без отлова везде горячей комбинации. Самый простой и надёжный это таймер, сложнее это поток. А так появится на форме датапикер, будешь здесь писать как на нем поймать.



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




Пост N: 5773
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.03.18 00:07. Заголовок: Haz пишет: Так и сп..


Haz пишет:

 цитата:
Так и спрашивай, как из текстбокса перехватить клаву. С бровсом я так понял проблем нет.
А то не понятно, толи ты улучшайзингом примеров занимаешься, толи конкретную свою задачу решаешь.



В этом примере с бровсом разобрался, думал не смогу.
Вот и остался один объект (текстбокс) где не смог перехватить клаву.
Чтобы другой пример не плодить, остался на этом примере.
Насчёт гетбокс понял, буду смотреть.
Спасибо !

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1213
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.03.18 00:23. Заголовок: Andrey пишет: Вот и..


Andrey пишет:

 цитата:
Вот и остался один объект (текстбокс) где не смог перехватить клаву.


А если на форме будет 100 контролов, все перехватывать будешь.?
Проще повесить таймер на форму с интервалом 1000 в котором сравнивать текущй язык с твоей лейбой.
Не совпало, значит что то из них надо поменять и скорее всего это лейба.

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


Пост N: 784
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 13.03.18 09:59. Заголовок: Как заставить правил..



 цитата:
Как заставить правильно отображать клавиатуру находясь в TEXTBOX Text_1


Я при входе в Box сам устанавливаю нужную раскладку, чтобы юзер и не парился

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




Пост N: 5775
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.03.18 13:57. Заголовок: Vlad04 пишет: Я при..


Vlad04 пишет:

 цитата:
Я при входе в Box сам устанавливаю нужную раскладку, чтобы юзер и не парился


Справочник оборудования, список на русском и английском. Какую тогда раскладку ставить ?

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





Пост N: 54
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 14.03.18 07:21. Заголовок: Vlad04 пишет: Я при..


Vlad04 пишет:

 цитата:
Я при входе в Box сам устанавливаю нужную раскладку



чем, не подскажешь ...

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6763
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.03.18 20:50. Заголовок: Вопрос по примеру WE..


Вопрос по примеру WEBCAM_2
Жму кнопку Capture , картинка после первого нажатия не меняется , хотя файл снимок и появляется.
Проверял hBitmap в процедуре CaptureImage и он не пустой.
Жму повторно на Capture , картинка под этой кнопкой поменялась. Далее сворачиваю окно и после
снова его поднимаю а картинки под Capture уже нет.
Как лечить ?

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




Пост N: 1778
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.03.18 21:57. Заголовок: Dima пробни так *-..


Dima
пробни так
 
*-----------------------------------------------------------------------------*
Procedure Main
*-----------------------------------------------------------------------------*
SET OOP ON
...
ON INIT ( (This.Object):PostMsg(1), DoEvents(), ;
(This.Object):PostMsg(1) ) ; // CaptureImage() ; // capture initialization
ON RELEASE CloseWebCam() ;
ON RESTORE ( (This.Object):PostMsg(1), DoEvents(), ;
(This.Object):PostMsg(1) )

(This.Object):Event( 1, {|| CaptureImage() })
...
DEFINE BUTTON Button_3
ROW 80
COL 315
WIDTH 80
CAPTION 'Capture'
ACTION ( (ThisWindow.Object):PostMsg(1), DoEvents() )
END BUTTON


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6764
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.03.18 22:39. Заголовок: SergKis пишет: проб..


SergKis пишет:

 цитата:
пробни так


Не помогло однако
ON INIT сделал такой , но картинка сразу не появляется.
 
ON INIT ( (This.Object):PostMsg(1), DoEvents(CaptureImage()) ,(This.Object):PostMsg(1))


Фокус с ON RESTORE не сработал ....

ACTION в Button_3 сделал такой , работает теперь нормально
 
ACTION ( (ThisWindow.Object):PostMsg(1),DoEvents(CaptureImage()) )


PS
По большому счету в ON INIT можно и убрать CaptureImage() , как и сам ON INIT

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




Пост N: 1779
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.03.18 22:45. Заголовок: Dima пишет По большо..


Dima пишет
 цитата:
По большому счету в ON INIT можно и убрать


поставить тиймер с сообщением на время и будет долбить фото.

 цитата:
Не помогло однако


у меня работает нормально, 1-раз инициализация, 2-раз пошла фото, так же и при restore ok


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6765
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.03.18 22:51. Заголовок: SergKis Я тупанул ,..


SergKis
Я тупанул , сорри. Не придал значения этой строке и не добавлял ее
(This.Object):Event( 1, {|| CaptureImage() })

Все работает отлично
Спасибо !

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




Пост N: 1780
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.03.18 07:04. Заголовок: Dima С событиями, т..


Dima
С событиями, такой пример получается Скрытый текст


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




Пост N: 1781
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.03.18 07:11. Заголовок: PS пропустил, вместо..


PS
пропустил, вместо
ON RELEASE CloseWebCam() ;
надо
ON RELEASE wPost(2) ;
и
(This.Object):Event( 1, {| | CreateWebCam(), wPost(3) })


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




Пост N: 1782
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.03.18 08:36. Заголовок: Плюс в пример пульт ..


Плюс в пример пульт управления Скрытый текст


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6766
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.03.18 09:39. Заголовок: SergKis Пример поня..


SergKis
Пример понятен. Спасибо.

Не понятно почему без такого подхода глючил Image_1 на Form_1
Ведь не должен.
Ведь в других примерах с IMAGE , при сворачивании окна и последующем поднятии
ни чего ведь не глючит.....

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




Пост N: 1783
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.03.18 10:30. Заголовок: Dima пишет Ведь не д..


Dima пишет
 цитата:
Ведь не должен.


Надо расставить DO EVENTS и заработает, очередь не успевает обработаться, сообщения теряются.
Я не хотел лезть во все функции, потому перевел пример на SET OOP ON.
Подправил родной пример, вроде пошел Скрытый текст


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6767
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.03.18 10:56. Заголовок: SergKis пишет: Надо..


SergKis пишет:

 цитата:
Надо расставить DO EVENTS и заработает, очередь не успевает обработаться, сообщения теряются.


Понял тебя.
Есть еще вопрос.
Имеем запись в файл gPlusSaveHBitmapToFile( hBitmap, "webcam.jpg", nWidth, nHeight, "image/jpeg", 100 ) (переделал на JPG)
Хотелка: что бы в качестве nWidth и nHeight подставлялись значения исходя из максимального разрешения самой камеры.
Как то можно дернуть характеристики камеры ?

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6768
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.03.18 13:24. Заголовок: Пробнул тест снятия ..


Пробнул тест снятия скриншота математикой что шла с камерой.
Фоткал документ. На выходе получил картинку с разрешением 2048 на 1536.
Текст довольно читаем.
Попробовал сделать скриншот с помощью webcam_2 где в LoadFromClpbrd подправил
nWidth, nHeight на 2048 и 1536
И в gPlusSaveHBitmapToFile тоже подправил nWidth, nHeight на 2048 и 1536.
Текст на картине получил не такой читаемый и расплывчатый.
С 6-м параметром в gPlusSaveHBitmapToFile , игрался , не помогает. Разве что ухудшить
можно качество делая его меньше 100. Больше 100 , не пашет и видимо и не должно.

В чем прикол ?

Еще поигрался и вроде все дело в cap_EditCopy , именно она ложит в буфер такое корявое изображение.
Поставил паузу после cap_EditCopy и слямздил из буфера картинку в PAINT , так и есть.......

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6769
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.03.18 17:10. Заголовок: Может кто то портиро..


Может кто то портировать в Harbour функцию capSetVideoFormat ?

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




Пост N: 1254
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.03.18 21:13. Заголовок: Dima пишет: портиро..


Dima пишет:

 цитата:
портировать в Harbour функцию capSetVideoFormat


Лови
#pragma BEGINDUMP 

#include <hbapi.h>
#include <windows.h>
#include <vfw.h>

#if defined( __BORLANDC__ )
#pragma warn -use /* unused var */
#endif

HB_FUNC( CAPSETVIDEOFORMAT )
{

BITMAPINFO binf;
HWND hCapWnd = (HWND) hb_parnl(1);

capGetVideoFormat(hCapWnd, &binf, sizeof(BITMAPINFO));
binf.bmiHeader.biWidth = hb_parni(2);
binf.bmiHeader.biHeight = hb_parni(3);
binf.bmiHeader.biPlanes = 1;
binf.bmiHeader.biBitCount = 24;
binf.bmiHeader.biCompression = BI_RGB;
binf.bmiHeader.biSizeImage = 0;
binf.bmiHeader.biClrUsed = 0;
binf.bmiHeader.biClrImportant = 0;
hb_retl( capSetVideoFormat(hCapWnd, &binf, sizeof(BITMAPINFO)) );

}

#pragma ENDDUMP

Использовать :

 цитата:
capSetVideoFormat(This.WebCam_1.Handle, 640, 480)



Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6770
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.03.18 21:55. Заголовок: gfilatov2002 Спасиб..


gfilatov2002
Спасибо

Странный меседж получил во время сборки
Warning W8019 demo.prg 784: Code has no effect in function HB_FUN_CAPSETVIDEOFORMAT

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




Пост N: 1255
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.03.18 22:26. Заголовок: Dima пишет: Warning..


Dima пишет:

 цитата:
Warning W8019


Просто добавь подавление этого предупреждения;

 цитата:
#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>
#include <vfw.h>

#if defined( __BORLANDC__ )
#pragma warn -use /* unused var */
#pragma warn -eff /* no effect */
#endif
...



Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6790
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.03.18 09:04. Заголовок: Поменяли вебкамеру н..


Поменяли вебкамеру на Logitech c920 , разрешение у нее конечно приличное по сравнению c270.
Поменял разрешение с помощью capSetVideoFormat на 2304 x 1536 и оба примера WEBCAM и WEBCAM_2
начали жутко тормозить , когда иногда удается нажать кнопку снять капчу , то картинка реально
нормальная , правда размер в BMP (если) , то почти 11 метров )))
Попробовал фокус с https://github.com/michael4jonas/capcam , снимает норм и тормозов таких нет.
Запускал командой capcam.exe 0 -r18 -fjpg -odd2.jpg
Где r18 ( 18: 2304 x 1536)

PS
Что то не пруха с этой камерой ))


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6791
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.03.18 15:44. Заголовок: Dima пишет: Поменял..


Dima пишет:

 цитата:
Поменял разрешение с помощью capSetVideoFormat


Кажись этого и не надо было делать так как тормоза.......
А надо юзать capCaptureSetSetup (а может и нет) , но понятно что с её написанием ни кто не поможет :)
Хотелось бы что б видео как отображалось так и отображается а вот что бы Капча снялась с
нужным разрешением и не 640 на 480 (и не преобразованное из 640 на 480 в большее)

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1219
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.03.18 16:38. Заголовок: Dima пишет: о понят..


Dima пишет:

 цитата:
о понятно что с её написанием ни кто не поможет


Ну прям и никто
Сюда глянь http://forums.fivetechsupport.com/viewtopic.php?t=5695
там есть это и многое другое
 
HB_FUNC( CAPCAPTURESETSETUP )
{
CAPTUREPARMS Capture;
hb_retl( capCaptureSetSetup( (HWND) hb_parnl( 1 ), &Capture, sizeof( CAPTUREPARMS ) ));
}



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




Пост N: 5790
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.03.18 14:47. Заголовок: Использую функцию из..


Использую функцию из МиниГуи CreateFolder(). Проблем не было.
Но под работой Win2008 Server не удаётся создать папку для пользователя.
Как получить код ошибки для этой функции ?
Или нужно делать старый клиперовский вариант MakeDir(), где есть обработка ошибок.
Или можно использовать DosError() и всё ?
Мне просто проверить негде такую ситуацию.


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


Пост N: 1393
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 29.03.18 15:22. Заголовок: Andrey пишет: под р..


Andrey пишет:

 цитата:
под работой Win2008 Server не удаётся создать папку для пользователя


Где пытаешься создать папку?

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




Пост N: 5792
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.03.18 15:44. Заголовок: PSP пишет: Где пыта..


PSP пишет:

 цитата:
Где пытаешься создать папку?



Функция GetUserTempFolder()
по пути C:\Users\ЮЗЕР\AppData\Local\Temp
У всех нормально, а у этого сервера ошибка - папку не создаёт !

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3710
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.18 15:44. Заголовок: Наверное надо сделат..


Наверное надо сделать обертку для GetLastError()
Примерно так:

HB_FUNC( GETLASTERROR ) 
{
hb_retnl( GetLastError() );
}


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




Пост N: 5793
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.03.18 15:48. Заголовок: Pasha пишет: Наверн..


Pasha пишет:

 цитата:
Наверное надо сделать обертку для GetLastError()



А в МиниГуи нет разве стандартной обработки для функций типа CreateFolder() ?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3712
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.18 15:54. Заголовок: CreateFolder() возвр..


CreateFolder() возвращает логическое значение. При неудаче надо анализировать GetLastError, а обертки для нее похоже нет.
Ее надо воткнуть куда-нибудь вроде c_winapimisc.c, можно в конец файла

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3713
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.18 16:15. Заголовок: Andrey пишет: Или н..


Andrey пишет:

 цитата:
Или нужно делать старый клиперовский вариант MakeDir(), где есть обработка ошибок.



С точки зрения winapi функции hb_dirCreate aka MakeDir и CreateFolder работают одинаково. Кроме анализа результата конечно.
Так что лучше использовать MakeDir.

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




Пост N: 5794
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.03.18 16:17. Заголовок: Pasha пишет: Ее над..


Pasha пишет:

 цитата:
Ее надо воткнуть куда-нибудь вроде c_winapimisc.c, можно в конец файла



Спасибо БОЛЬШОЕ !

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




Пост N: 5798
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.03.18 01:45. Заголовок: Эта функция уже реал..


Эта функция уже реализована в Харбор библиотеке hbwin под именем wapi_GetLastError () /Григорий/
Оказывается есть такая проверка !

Pasha пишет:

 цитата:
Так что лучше использовать MakeDir.


Да уже привык в МиниГуи писать везде CreateFolder().

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3714
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.03.18 09:43. Заголовок: Andrey пишет: Эта ф..


Andrey пишет:

 цитата:
Эта функция уже реализована в Харбор библиотеке hbwin под именем wapi_GetLastError ()



Для minigui эта функция не прокатит. wapi_GetLastError возвращает код ошибки, которая возникла при выполнении другой функции из библиотеки hbwin. Эта функция должна установить ошибку вызовом hbwapi_SetLastError / wapi_SetLastError. Функции из minigui это не делают.

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


Пост N: 794
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 30.03.18 10:55. Заголовок: Я использую ..


Я использую

 цитата:

DISKCHANGE(Left(sDir,1))
DIRCHANGE(sDir)
nErrorCode:=DIRMAKE(sTxt2)


Это одно и тоже с MakeDir?
Ошибки обрабатываются, т.е выдаются. Два раза одну и ту же директорию не создашь.
А коды ошибок где почитать ?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3715
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.03.18 11:06. Заголовок: DirMake - это функци..


DirMake - это функция из ct. DiskChange/DirChange - функции харбора.
Поскольку DirMake из ct, как и MakeDir из ядра харбора, реализованы через харборовский файловый api, то и обработка ошибок у них одинаковая.

Функции из minigui - это отдельное независимое государство, даже если в конце концов они выполняют те же самые вызовы winapi, поэтому средства обработки ошибок харбора они не используют. Должны быть свои средства. Достаточно маленькой обертки для GetLastError.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3716
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.03.18 11:13. Заголовок: Pasha пишет: А коды..


Pasha пишет:

 цитата:
А коды ошибок где почитать ?



Поскольку харбор многоплатформенный, то функция HB_OSERROR возвращает код ошибки соответствующей ОС, в нашем случае Windows.
Эти коды надо искать в winapi
Но есть еще функция DosError, которая транслирует коды ошибок каждой ОС в старые коды MS DOS.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3717
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.03.18 12:25. Заголовок: Кстати, можно легко ..


Кстати, можно легко интегрировать файловые функции minigui в harbour file api таким образом:

HB_FUNC( CREATEFOLDER )
{
// вместо
// hb_retl( CreateDirectory( ( LPCTSTR ) hb_parc( 1 ), NULL ) );
hb_retl( hb_fsMkDir( hb_parc( 1 ) ) );
}

тоже самое можно сделать еще с несколькими подобными функциями. Работать они будут так же, но появится возможность анализа ошибок стандартными средствами харбора.

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




Пост N: 1270
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.03.18 12:32. Заголовок: Pasha пишет: Для mi..


Pasha пишет:

 цитата:
Для minigui эта функция не прокатит.


Спасибо за разъяснение этого вопроса

Pasha пишет:

 цитата:
воткнуть куда-нибудь вроде c_winapimisc.c


Добавмл функцию-обертку GetLastError() в этот файл.

Vlad04 пишет:

 цитата:
коды ошибок где почитать ?


Они есть в файле bcc55\include\error.h

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




Пост N: 5800
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.03.18 15:02. Заголовок: Вопрос возник... Мож..


Вопрос возник...
Можно ли показать прозрачный PNG-файл произвольной формы (допустип круг) сразу на рабочем столе ?
Или на форме, только убрать (сделать невидимым) само окно, оставив картинку.

Где то пример видел в библиотеке с вводом пароля, там окно было не стандартное, фигурное.
Искал и не нашёл.



Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6793
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.03.18 16:19. Заголовок: Andrey пишет: Искал..


Andrey пишет:

 цитата:
Искал и не нашёл.


А искал вообще ?
C:\MiniGUI\SAMPLES\BASIC\Login_2\

ЗЫ
Как пить дать Андрей скажет что искал только по слову Pass

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




Пост N: 5802
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.03.18 20:56. Заголовок: Dima пишет: А искал..


Dima пишет:

 цитата:
А искал вообще ?


Все папки вручную перерыл. Помню, видел такой пример.
Спасибо Дима !

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




Пост N: 5810
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.04.18 08:23. Заголовок: Всем привет ! Как м..


Всем привет !

Как можно получить размер PNG-файла из ресурсов ?
Есть функция типа - GetImageSizeFromRes() ?

Или нужно в коде выгрузить PNG-файл из ресурсов на диск, а потом уже узнавать размер файла:
nResult := RCDataToFile( "IMAGE1", cDiskFile, "PNG" )
aSize := hb_GetImageSize( cDiskFile )

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




Пост N: 1273
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.04.18 11:48. Заголовок: Andrey пишет: Как м..


Andrey пишет:

 цитата:
Как можно получить размер PNG-файла из ресурсов ?


Это возможно сделать в примере из папки Basic\Login_2,
если изменить функцию GetImageInfo() таким образом:

FUNCTION GetImageInfo( cPicFile, nPicWidth, nPicHeight ) 
LOCAL hBitmap, aSize

hBitmap := C_GetResPicture( cPicFile )

aSize := GetBitmapSize( hBitmap )

DeleteObject( hBitmap )

nPicWidth := aSize [1]
nPicHeight := aSize [2]

RETURN (nPicWidth > 0) // GetImageInfo()


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




Пост N: 5811
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.04.18 16:24. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
если изменить функцию GetImageInfo() таким образом:


Спасибо БОЛЬШОЕ ! Буду использовать !

Может всё таки добавите ЯВНО функцию в библиотеку, чтобы можно было потом ею пользоваться ?
GetImageSizeFromRes() - понятное название функции.
Вот такой код примерно -
Скрытый текст



Тем более встречал такое - METHOD GetImageSizeFromFile( ... )

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6798
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.18 16:36. Заголовок: Andrey пишет: Тем б..


Andrey пишет:

 цитата:
Тем более встречал такое - METHOD GetImageSizeFromFile( ... )


Вероятно тут C:\MiniGUI\SAMPLES\Advanced\RMChart_DLL_2\

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1222
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.04.18 17:01. Заголовок: Dima пишет: Вероятн..


Dima пишет:

 цитата:
Вероятно тут C:\MiniGUI\SAMPLES\Advanced\RMChart_DLL_2\


c DLL мутить не очень хочется ради одной функции.

Тем более , что все и так есть причем в сырцах минмгуя MiniGUI\SOURCE\c_bitmap.c
 
HB_FUNC( HB_GETIMAGESIZE )
{
int x = 0, y = 0;

GetImageSize( hb_parcx( 1 ), &x, &y );

hb_reta( 2 );
HB_STORNI( x, -1, 1 );
HB_STORNI( y, -1, 2 );
}

/*
Harbour MiniGUI 1.3 Extended (Build 33)
Author P.Chornyj

Function BitmapSize()
---------------------
Syntax
BitmapSize( xBitmap ) --> aTarget

Arguments
<xBitmap> is the NAME of the bitmap file or resource
or
<xBitmap> is the handle to OBJ_BITMAP

Returns
BitmapSize() returns an array has the following structure:
----------------------------------------------------------
Position Metasymbol i_bitmap.ch
----------------------------------------------------------
1 nWidth BM_WIDTH
2 nHeight BM_HEIGHT
3 nBitsPerPixel BM_BITSPIXEL
----------------------------------------------------------
If file or resource are not found or corrupt, or is not OBJ_BITMAP,
BitmapSize returns an array {0, 0, 4} for compatibility
*/



Андрей предложил обертку для этого, но ведь функция читает не только из ресурса , и как минимум название предложенного это не отражает
PS Причем , эта обертка всего лишь добавляет сообщение об ошибке
PPS. Кроме того в библиотеке бостаурос есть аналоги ВT_BITMAPWIDTH и пр.
Думаю плодить сущности не стоит, достаточно для работы.

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




Пост N: 5813
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.04.18 14:47. Заголовок: Всем привет ! Взял с..


Всем привет !
Взял сделал свой пример на базе примера SAMPLES\BASIC\Login_2.
В нём команда
        SET WINDOW frmCheckUser TRANSPARENT TO COLOR aPicBackColor

не компилируется... Выдаёт ошибку при компиляции.
Harbour 3.2.0dev (r1803161710)
Copyright (c) 1999-2018, https://harbour.github.io/
form_LoginPassw.prg(161) Error E0030 Syntax error "syntax error at 'WINDOW'"
1 error
No code generated.

Исправил на команду
        SetLayeredWindowAttributes( GetFormHandle( "frmCheckUser" ), ( aPicBackColor[1] + ( aPicBackColor[2] * 256 ) + ( aPicBackColor[3] * 65536 ) ), 0, 0x01 )

Компиляция прошла, всё работает...
Одна незадача - чёрный цвет вообще пропал, стал прозрачным.
Поменял черный цвет на темно-синий. Терпимо.
Окантовка кнопок на форме черная поменялась на прозрачную. Как менять окантовку кнопок на темно-синий не знаю как ...
И вообще, можно ли изменить aPicBackColor := BLACK на другой цвет, который чаще всего не используется ?
Допустим на FUCHSIA ?
Но чтобы форма оставалась прозрачной !


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


Пост N: 1401
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 12.04.18 14:54. Заголовок: Andrey пишет: SetLa..


Andrey пишет:

 цитата:
SetLayeredWindowAttributes( GetFormHandle( "frmCheckUser" ), ( aPicBackColor[1] + ( aPicBackColor[2] * 256 ) + ( aPicBackColor[3] * 65536 ) ), 0, 0x01 )


Я не утверждаю, но может 255 и 65535 надо?

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6801
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.04.18 15:51. Заголовок: Andrey пишет: SetL..


Andrey пишет:

 цитата:
SetLayeredWindowAttributes( GetFormHandle( "frmCheckUser" ), ( aPicBackColor[1] + ( aPicBackColor[2] * 256 ) + ( aPicBackColor[3] * 65536 ) ), 0, 0x01 )


Что то не то ты намутил , примеры то смотрел ?
По ходу если такое полупрозрачное окно будет лежать на других окнах с достаточно большим кол-вом контролов (например Tsbrowse как новогодняя ёлка) , то будут тормоза.

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




Пост N: 5814
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.04.18 18:55. Заголовок: Dima пишет: Что то ..


Dima пишет:

 цитата:
Что то не то ты намутил , примеры то смотрел ?


Конечно смотрел.

Dima пишет:

 цитата:
По ходу если такое полупрозрачное окно будет лежать на других окнах с достаточно большим кол-вом контролов (например Tsbrowse как новогодняя ёлка) , то будут тормоза.


Я одно окно использую, при логине в программу !

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6802
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.04.18 19:15. Заголовок: Andrey Так не устра..


Andrey
Так не устраивает ?
#define LWA_ALPHA 0x02
SetLayeredWindowAttributes( GetFormHandle( "frmCheckUser" ) , 0, 150 , LWA_ALPHA )

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




Пост N: 5815
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.04.18 19:44. Заголовок: Dima пишет: Так не ..


Dima пишет:

 цитата:
Так не устраивает ?


Нет, не то...
Окно целиком видно, т.е. нет прозрачности и сама картинка блёклая выводится...

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




Пост N: 5817
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.04.18 09:03. Заголовок: Andrey пишет: И воо..


Andrey пишет:

 цитата:
И вообще, можно ли изменить aPicBackColor := BLACK на другой цвет, который чаще всего не используется ?
Допустим на FUCHSIA ?
Но чтобы форма оставалась прозрачной !



Оказывается это можно сделать (Григорий подсказал) !
Добавляем к примеру новую картинку и эти строчки:
 
// Другой вариант цветовой палитры для показа картинки без формы окна
cPictFNm := "res\FolderLock2.png"
aPicBackColor := FUCHSIA


Картинку нужно исправить на такую:



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




Пост N: 5854
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.04.18 21:43. Заголовок: Опять баг нашёл. Или..


Опять баг нашёл. Или что-то неправильно делаю.

Есть у меня окно для обновления программы.
С главного меню вызывается нормально, а с другого меню нет вообще реакции, не вызывается окно.
Что только не переделал, MsgDebug() показывается из окна обновления программы, а самого окна нет.
Убился пока нашёл в чём дело.

Размер высоты окна задаю через переменную:
nMaxHeight := GetProperty( "Form_Main", "Height" ) - 80

В случае вызова окна обновления размер получается правильным,
а в случае вызова из другого окна размер получается неправильным, равным -79 ????
Из-за этого окно это и не видно...
Почему так ? Что я неправильно делаю ?


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




Пост N: 5858
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.05.18 13:05. Заголовок: Всем привет ! Подск..


Всем привет !

Подскажите пожалуйста:
1) Как из самой программы узнать имя - окна процесса, которое есть в диспетчере задач ?
2) Как это имя можно задать/изменить из программы ?
Знаю, что это задаётся в ресурсном файле в секции:
           VALUE "FileDescription", "Имя моей программы"

3) Почему в моей программе, я задаю имя MAIN окна, а в Диспетчере задач имя совсем другое - "MiniGUI Extended" ?
вот картинка:


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




Пост N: 5864
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.05.18 23:10. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Я написал для этого функцию FileVersInfo(), которая есть в примере Process Killer
Используется она следующим образом:



А кроме этого метода есть другие варианты, как узнать имя запущенной программы в Диспетчере задач ?
Можно ли по хендлу окна определить Имя программы в Диспетчере задач ?

Вот нашёл код для С++ (в самом конце страницы) https://rsdn.org/forum/winapi/2843651.all
Кто поможет переделать под Харбор ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1250
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.05.18 16:28. Заголовок: Andrey пишет: Кто п..


Andrey пишет:

 цитата:
Кто поможет переделать под Харбор ?


Все давно переделано и описано в форуме
http://clipper.borda.ru/?1-4-0-00001225-000-0-0

Плюс конечно же примеры Григория с его функцией GetExeName( HWND hWnd, char *szFileName )


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




Пост N: 5865
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.05.18 16:56. Заголовок: Haz пишет: Все давн..


Haz пишет:

 цитата:
Все давно переделано и описано в форуме


Да не понял я как там написано.
Кода нет полного или частичного.
Читаешь что вы там писали и НИ ЧЕГО не понимаешь !!!
Уровень ещё не тот...

Haz пишет:

 цитата:
Плюс конечно же примеры Григория с его функцией GetExeName( HWND hWnd, char *szFileName )


Но это же не совсем то что нужно.
По пути запуска программы читать ехе-файл и вытаскивать из него имя программы (где то пишут процесса).
Программа же загружена в памяти, есть хендл этой программы - вот и прочитать его нужно. Это же более правильно.

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




Пост N: 5956
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.07.18 19:20. Заголовок: Всем привет ! Как ко..


Всем привет !
Как консольный пример собирать знаю... через Compile.bat
Вот как в MiniGUI\SAMPLES\BASIC\ConsoleToGUI
А как собрать файл проекта для консольного примера - не знаю...
Как сделать demo1.hbp для DEMO1.PRG ?
Подскажите пожалуйста.

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




Пост N: 1323
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.07.18 12:42. Заголовок: Andrey пишет: Как к..


Andrey пишет:

 цитата:
Как консольный пример собирать знаю... через Compile.bat



 цитата:
HBMK2 Compile batch
Based upon an original work of Roberto Lopez for HMG 3.0
Last revised by Grigory Filatov 03/10/2017

Syntax:

Build [/d] [/e] [/c] [/i [/nh]] [/r] [/n] <PrgFile>|<filelist.hbp> [config.hbc]

[/d] : Debug Mode
[/e] : Send Warnings to build.log
[/c] : Console mode



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




Пост N: 5957
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.07.18 14:22. Заголовок: Спасибо, понял ! :s..


Спасибо, понял !
А команду в сам demo1.hbp вставить нельзя ?
Там вроде есть опции:
-gui|-std create GUI/console executable

Ставлю в demo1.hbp эту опцию -std, консоль собирается но вывода на экран НЕТУ ! Почему ?

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




Пост N: 5958
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.07.18 15:25. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Попробуй
call ..\..\batch\hbmk2.bat /c demo1.hbp



В папке MiniGUI\SAMPLES\BASIC\ConsoleToGUI создал demo1.hbp и запустил на компиляцию.
ЕХЕ-ник собрался и запускается - но ТОЛЬКО ЧЕРНЫЙ ЭКРАН !!!
Вывода на экране ни какого нет ! Почему ?

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




Пост N: 1324
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.07.18 15:43. Заголовок: Andrey пишет: Вывод..


Andrey пишет:

 цитата:
Вывода на экране ни какого нет


Добавь в начало файла demo1.prg такую строку

REQUEST HB_GT_WIN_DEFAULT

#include "inkey.ch" 

REQUEST HB_GT_WIN_DEFAULT

function Main()
...


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




Пост N: 5959
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.07.18 16:36. Заголовок: Спасибо !!! :sm36: ..


Спасибо !!!

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




Пост N: 6004
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.18 19:10. Заголовок: Почему в файл пишетс..


Почему в файл пишется фигня дополнительная ?
Делаю так:
   // Подпись под таблицей 
cTitle := "Signature below the table (output example)"
cTitle2 := "File - " + cFile
aColor := { RED , WHITE } // цвет/фон
aTTitle3 := {}
AADD( aTTitle3, { "" } )
AADD( aTTitle3, { cTitle , { "Arial", 14, .f. , .f. }, aColor } )
AADD( aTTitle3, { cTitle2, { "Arial", 14, .f. , .f. }, aColor } )
AADD( aTTitle3, { "" } )
hb_MemoWrit("тбл_6Под_таблицей.dim", hb_ValToExp( aTTitle3 ))

В результате в файле так записывается:
__itemSetRef( {{""}, {"Signature below the table (output example)", {"Arial", 14, .F., .F.}, {..... .F., .F.}, NIL}, {""}}, {{{3,3},{2,3}}} )
Как убрать эту фигню ?


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




Пост N: 1964
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.08.18 10:58. Заголовок: Andrey пишет Как убр..


Andrey пишет
 цитата:
Как убрать эту фигню ?


 
LOCAL a,j, cTitle := "Signature below the table (output example)" , ;
cTitle2 := "File - " + "тбл_6Под_таблицей.dim" ,;
aColor := { RED , WHITE }, ; // цвет/фон
aTTitle3 := {}

AADD( aTTitle3, { "" } )
AADD( aTTitle3, { cTitle , { "Arial", 14, .f. , .f. }, aColor } )
AADD( aTTitle3, { cTitle2, { "Arial", 14, .f. , .f. }, aColor } )
AADD( aTTitle3, { "" } )
a := CtoA( AtoC( aTTitle3 ) )
hb_MemoWrit('_1.txt', hb_ValToExp( aTTitle3 ))
hb_MemoWrit('_2.txt', hb_ValToExp( a ))
можно сразу использовать
hb_MemoWrit('_1.txt', AtoC( aTTitle3 ))
...
aTTitle3 := CtoA( hb_MemoRead('_1.txt') )
...



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




Пост N: 6005
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.08.18 12:21. Заголовок: SergKis СПАСИБО ! :..


SergKis СПАСИБО !

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




Пост N: 6023
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.09.18 13:36. Заголовок: Всем привет ! Пытаюс..


Всем привет !
Пытаюсь на кнопку поставить обычный знак минус, не красиво получается.
Какой фонт и какой символ можно использовать для этого ?


И ещё вопрос.
Можно ли в объекты Label, ButtonEx назначить фонт типа Wingdings и вводить оттуда символы ?
И как проще подбирать нужный символ ?

P.S. Проехали, разобрался сам ....

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




Пост N: 6027
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.09.18 23:02. Заголовок: Всем привет ! А как ..


Всем привет !
А как узнать высоту меню, которое вверху окна создаётся ?
      DEFINE MAIN MENU 
....
POPUP 'Help' FONT cFont1
ITEM 'About the program' ACTION MsgInfo ("Reference!")
END POPUP
END MENU


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6919
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.09.18 23:35. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как узнать высоту меню, которое вверху окна создаётся ?


Посмотреть сырец

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




Пост N: 1998
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.09.18 10:05. Заголовок: Dima пишет Посмотрет..


Dima пишет
 цитата:
Посмотреть сырец


Для начала ChangeLog.txt
 
2018/06/06: HMG Extended Edition version 18.05.
...
* New: Added possibility to set/get of the NON CLIENT attributes of windows
at runtime.
You can get the following properties with the functions:
- GetWindowBorderSize();
- GetScrollBarSize();
- GetTitleBarWidth() and GetTitleBarHeight();
- GetMenuBarSize().
You can set these properties with the commands:
SET WINDOW BORDER TO <nPixels>
SET SCROLLBAR [SIZES] TO <nPixels>
SET TITLEBAR [ WIDTH | HEIGHT ] TO <nPixels>
SET [STANDARD] MENU [SIZES] TO <nPixels>
...


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




Пост N: 6029
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.09.18 10:59. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для начала ChangeLog.txt


Блин, видел же этот кусочек, вставлял уже эту функцию в другую прогу.... Памяти вообще нет.
Спасибо !

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




Пост N: 6045
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 20:00. Заголовок: А как можно проверит..


А как можно проверить, что программа запущена 2 раза ?
 
LOCAL cAppTitle := Form_0.Title
LOCAL hWnd := FindWindowEx( ,,, cAppTitle )

If hWnd # 0
// ? можно ли как то продолжить перебор окна

Endif


Спасибо: 1 
Профиль
Haz
администратор




Пост N: 1311
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.09.18 20:49. Заголовок: Andrey пишет: можно..


Andrey пишет:

 цитата:
можно ли как то продолжить перебор окна


Дима так и называл тему Findwindowex, там простой пример перебора.
И ты в этой теме отметился. Пора заводить блокнотик, память слишком часто подводит.

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




Пост N: 6046
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 20:55. Заголовок: Haz пишет: Дима так..


Haz пишет:

 цитата:
Дима так и называл тему Findwindowex, там простой пример перебора.


Спасибо Haz !
Только там нет перебора, т.е. как продолжить поиск далее ?

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




Пост N: 6047
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 21:22. Заголовок: Нашёл как сделать пе..


Нашёл как сделать перебор всех окон в памяти:
Скрытый текст


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1312
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.09.18 21:22. Заголовок: Andrey пишет: Тольк..


Andrey пишет:

 цитата:
Только там нет перебора


 
lMore := TRUE
While lMore
do events
hWnd := FindWindowText( Application.Handle, { |x| "TEST123" $ Upper(x) } )
IF hWnd > 0 // находит всегда
lMore := FALSE
END
End

В цикле перебираем окна, как только нашли то завершает цикл.
Что мешает запомнить найденный хендл и продолжить поиск следующего и так далее

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




Пост N: 6048
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 21:26. Заголовок: Haz пишет: Что меша..


Haz пишет:

 цитата:
Что мешает запомнить найденный хендл и продолжить поиск следующего и так далее


Не могу понять как продолжить поиск дальше... Т.е. до какого цикла перебирать всё это.
А вдруг окажется 3-5 программ одинаковых одновременно в памяти ?
Вот мне нужно и подсчитать сколько программ в памяти - допустим "TEST123"

P.S. Есть ли короче решение, чем работающее - Пост N: 6047 ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1313
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.09.18 21:44. Заголовок: Andrey пишет: GetWi..


Andrey пишет:

 цитата:
GetWindow


Да это я тупанул.) много работать вредно.
Ты сам спросил, сам нашёл
Я тут уроки с ребёнком делаю, математика 6 класс, вот где (_! _)

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




Пост N: 6049
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 21:45. Заголовок: Вот так сделал подсч..


Вот так сделал подсчёт и реализовал смену цвета в Tsbrowse:


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




Пост N: 6050
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 21:47. Заголовок: Haz пишет: Ты сам с..


Haz пишет:

 цитата:
Ты сам спросил, сам нашёл


Не всегда бывает, что сам нахожу...
Спасибо за помощь !

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1314
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.09.18 22:01. Заголовок: Andrey пишет: сдела..


Andrey пишет:

 цитата:
сделал подсчёт


Через индекс?
Ordkeyno()?
В общем случае правильно, при активном фильтре опять шляпа получится

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




Пост N: 6051
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 22:43. Заголовок: Haz пишет: Через ин..


Haz пишет:

 цитата:
Через индекс?
Ordkeyno()?
В общем случае правильно, при активном фильтре опять шляпа получится



Это обучающий пример для тех кто переходит на CDX и МиниГуи + работа в сети.
Я сейчас товарищу помогаю с терминалки перейти, вот чтобы на пальцах не объяснять, сделал пример.
Я сам не знал что удаление записи имеет такой короткий код.
В примере Tsb_config для удаления куча кода используется.
А этот пример и не особо много кода занимает...

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




Пост N: 2019
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.09.18 23:09. Заголовок: Andrey пишет этот п..


Andrey пишет
 цитата:
этот пример и не особо много кода занимает...


Добавь еще чуть чуть
 
#include "hmg.ch"

#include "TSBrowse.ch"
...
SET AUTOPEN OFF

SET DIALOGBOX CENTER OF PARENT

aAlias := UseOpenBase() // открыть базы



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




Пост N: 6052
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.09.18 13:06. Заголовок: SergKis пишет: SET ..


SergKis пишет:

 цитата:
SET DIALOGBOX CENTER OF PARENT


А что это за команда ? Никогда не пользовался....

Вопрос возник, ставлю таймер:
// включить таймер 1 раз в полминуты вызов функции
DEFINE TIMER Timer_1 INTERVAL 30 * 1000 ACTION RecnoRefresh(oBr)

Можно ли в STATUSBAR (допустим в 3 позицию) получить состояния таймера с обратным отсчётом ?
Т.е. повесить таймер2 и выдавать каждую секунду 00:00:30, 00:00:29 и т.д.

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




Пост N: 2026
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.09.18 15:58. Заголовок: Andrey пишет А что э..


Andrey пишет
 цитата:
А что это за команда ? Никогда не пользовался....


1. Читай ChangeLog.txt 18.06
2. Собери exe примера с ней, запусти 2а раза, разведи окна по сторонам и делай (+) и (-) кнопки
3. Повтори все без этой строки и ощути разницу


 цитата:
Т.е. повесить таймер2 и выдавать каждую секунду 00:00:30, 00:00:29 и т.д.


Даже не знаю, что сказать ....
Тут тебе надо к Игорю, у него математика 6-го класса, а у меня арифметика 4-го (внук)

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6926
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.09.18 16:44. Заголовок: SergKis пишет: Даже..


SergKis пишет:

 цитата:
Даже не знаю, что сказать ....


К первоклашкам надоть ему

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1319
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.09.18 17:15. Заголовок: Сергей Даже не знаю..


Сергей

 цитата:
Даже не знаю, что сказать ....



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




Пост N: 6056
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.09.18 14:20. Заголовок: Всем привет ! Есть л..


Всем привет !
Есть ли стандартный объект типа MsgInfo только с прокруткой текста, который выводишь ?
Или самому придётся делать такое окно ?
А то у меня в MsgInfo не помещается весь текст и кнопки не видно.
Вот так на экране обрезает:

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




Пост N: 6087
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.10.18 17:18. Заголовок: Haz пишет: Ты же са..


Haz пишет:

 цитата:
Ты же сам в прошлом посте писал как это лечится


Не лечиться, тогда начинает бровс на экране мелькать.
На тяжёлых операциях, PACK, ZAP или таких:
    For nI := 1 TO Len(aArray)  
if ! empty(aArray[ nI ])
ADD ITEM aArray[ nI ] TO &cBrw OF &cForm // вариант 1
EndIf
IF nI % 500
DO EVENTS // чтобы показывать прелодер из WaitThreadCreate()
ENDIF
Next

Прелодер показывается белым, без картинки и лепестки не крутятся.
Такое впечатление что поток "замерз".
Хотя бы картинку первую показывал. Почему не показывает, не знаю.
Вот код из примера SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg:
FUNCTION WaitThreadCreate( cTitle )  
....
DEFINE WINDOW &cFormName ;
....
@ 40, (420-128)/2 IMAGE Image_1 PICTURE aStatPictWait[1] ;
WIDTH 128 HEIGHT 128 STRETCH WHITEBACKGROUND TRANSPARENT

END WINDOW

Center Window &cFormName
Activate Window &cFormName NoWait

// Start preloding in a separate thread
// Запускаем preloding в отдельном потоке
hb_threadDetach( hb_threadStart( HB_THREAD_INHERIT_MEMVARS, @WaitThreadTimer(), SECONDS() ) )

RETURN NIL


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1380
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.10.18 17:46. Заголовок: Andrey пишет: For n..


Andrey пишет:

 цитата:
For nI := 1 TO Len(aArray)
if ! empty(aArray[ nI ])
ADD ITEM aArray[ nI ] TO &cBrw OF &cForm // вариант 1
EndIf
IF nI % 500
DO EVENTS // чтобы показывать прелодер из WaitThreadCreate()
ENDIF
Next


Так ты убрал отсюда заполнение бровса или нет

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1381
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.10.18 17:50. Заголовок: В общем повторюсь о ..


В общем повторюсь о чем писал выше. Показывай свой прелодер во время заполнения массива данных и не надо в этот момент пихать что либо пихать в бровс. Подготовил данные, дай их бровсу через сетаррай и все.

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




Пост N: 2111
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.10.18 18:04. Заголовок: Haz пишет Подготовил..


Haz пишет
 цитата:
Подготовил данные, дай их бровсу через сетаррай и все.


Еще проще, до окна запусти прелодер, формируй в это время массив
по завершении создавай окно с тсб и в on init убирай прелодер и работай.
Ты все проделываешь, наверно, в on init ?

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




Пост N: 6089
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.10.18 18:06. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще проще, до окна запусти прелодер, формируй в это время массив
по завершении создавай окно с тсб и в on init убирай прелодер и работай.


Да я так и сделал ! Скорость возрасла, несмотря на большые данные.

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




Пост N: 2112
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.10.18 18:08. Заголовок: Andrey пишет Вот код..


Andrey пишет
 цитата:
Вот код из примера


То пример, а у тебя программа - это может быть большая разница

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




Пост N: 6091
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.10.18 18:09. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще проще, до окна запусти прелодер, формируй в это время массив
по завершении создавай окно с тсб и в on init убирай прелодер и работай.


Да я так и сделал ! Скорость возрасла, несмотря на большые данные.

Haz пишет:

 цитата:
Так ты убрал отсюда заполнение бровса или нет


Да !
Я ушёл от этого.
Сейчас другая проблема.
Первое окно прелодера - белое, без картинки.
Как сделать чтобы первое окно было с картинкой ?
Вот код из примера SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg:
FUNCTION WaitThreadCreate( cTitle )   
....
DEFINE WINDOW &cFormName ;
....
@ 40, (420-128)/2 IMAGE Image_1 PICTURE aStatPictWait[1] ;
WIDTH 128 HEIGHT 128 STRETCH WHITEBACKGROUND TRANSPARENT

END WINDOW

Center Window &cFormName
Activate Window &cFormName NoWait

InkeyGui(100)
DO EVENTS // поставил так, всё равно картинки нет !

// Start preloding in a separate thread
// Запускаем preloding в отдельном потоке
hb_threadDetach( hb_threadStart( HB_THREAD_INHERIT_MEMVARS, @WaitThreadTimer(), SECONDS() ) )

RETURN NIL


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




Пост N: 6092
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.10.18 18:10. Заголовок: SergKis пишет: То п..


SergKis пишет:

 цитата:
То пример, а у тебя программа - это может быть большая разница


Прелодер - один в один как и SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg

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




Пост N: 2113
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.10.18 18:24. Заголовок: Andrey Я без потоко..


Andrey
Я без потоков делаю, если это в пределах до 60 сек. обхожусь сообщением (+может быть счетчик в StatusBar)
Если использую окно с progressbar, так в таком виде вызов Do_WaitWindow( {|o| Otbor(o) } )
сама ф-я такая Скрытый текст

как то хватает.
В твоем случае нет прорисовки

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




Пост N: 6093
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.10.18 18:34. Заголовок: SergKis пишет: В тв..


SergKis пишет:

 цитата:
В твоем случае нет прорисовки


А почему ? Простой же код.
Не смертельно, но просто некрасиво.
В цикле с базой работает, а на тяжёлых операциях нет прорисовки и всё тут.
Делал даже так:
   // создаём окно ожидания с потоком 
WaitThreadCreate( 'Расчёт по отчёту ...' )
InkeyGui(100)
DO EVENTS

Всё равно нет прорисовки иногда.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1382
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.10.18 18:07. Заголовок: Не видно всего кода,..


Не видно всего кода, но такое ощущение что do events лишь бы впихнуть куда. Зачем он после запуска потока,? здесь самое нагруженное место в коде? А в цикле формирования массива данных он есть? Кажется что нет.
Могу ошибаться не видя код. Но что то мне подсказывает что не ошибаюсь

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


Пост N: 1483
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 28.10.18 19:23. Заголовок: Haz пишет: такое ощ..


Haz пишет:

 цитата:
такое ощущение что do events лишь бы впихнуть куда


У меня тоже. Андрей, DO EVENTS нужно ставить в "долгих циклах", чтобы приложение "не зависало".

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




Пост N: 6094
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.10.18 01:05. Заголовок: Haz пишет: Могу оши..


Haz пишет:

 цитата:
Могу ошибаться не видя код. Но что то мне подсказывает что не ошибаюсь


Буду тогда пробовать написать отдельный тест.

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




Пост N: 6117
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.11.18 14:31. Заголовок: Возвращаюсь опять к ..


Возвращаюсь опять к нерешённому вопросу.
У меня в проктах (некоторых) каталог по русски.
При компиляции проекта (через hbmk2.bat) файл error.log (и на экране) получается с кракозябами и сердечками...
И ошибок толком не видно !!!

Вопрос - куда поставить (в какой файл) определение кодировки:
chcp 65001
чтобы файл error.log создавался читаемым ?
Да и в поставку МиниГуи не плохо бы внести такое усовершенствование.

Пробовал поставить в hbmk2.bat , сердечки пропадают, но пути все равно нет:
Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland
Error: Unresolved external '_HB_FUN_SHOW2TSB' referenced from W:\HB_PROJECT\ABON4PRJ\└┴╬═┼═╥\TBRW_TABLE3.LIB|form_AbonYearCalc
hbmk2[form_Sprav_List]: Error: Running linker. 2


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3811
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.11.18 14:57. Заголовок: Как я понял, вывод н..


Как я понял, вывод на stdout компилятора и линкера переадресовывается в error.log, и есть проблема его прочесть ?
Так линкер не переделать, чтобы он в нужной кодовой странице выдавал свой лог. Разве что писать в спортлото Эмбаркадеро Текнолоджиз Инк.
Есть проблема прочесть текстовый файл в желаемой кодировке ? Так это умеет делать например всем известный фар.

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




Пост N: 6118
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.11.18 15:25. Заголовок: Pasha пишет: Как я ..


Pasha пишет:

 цитата:
Как я понял, вывод на stdout компилятора и линкера переадресовывается в error.log, и есть проблема его прочесть ?


Да. До этого были вообще кракозябы и сердечки.
Поставил в hbmk2.bat второй строкой chcp 65001, сердечки пропадают, но пути все равно нет.
Наверное это BCC линковщик выдаёт такую кракозябу.
Тем более он такой древний...
MS VC2017 берет кодировку заданной в файле сборки и по русски пишет правильно.
Понял, что никак.
Спасибо !
Но хоть от сердечек избавился....

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




Пост N: 6155
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.19 21:48. Заголовок: У меня опять фигня с..


У меня опять фигня с окнами получается.

Вызываю с главной формы окно MODAL(1) не во весь экран, на этой форме кнопки.
Допустим далее нажимаю кнопку5 , далее показ окна CHILD(5) с ТСБ (Tsbrowse).
В ТСБ на конкретную колонку вешаю свой обработчик.
     oBrw:aColumns[3]:bPrevEdit := { || MyEditColumn3() } 

В функции MyEditColumn3() делаю обработку свою и допустим на 10 позиции курсора - вызываю меню типа такого:
   DEFINE CONTEXT MENU OF &cForm 
MENUITEM "Редактировать" ACTION {|| nMenuItem := 1 } FONT Font1
SEPARATOR
MENUITEM "Скопировать поле в буфер обмена" ACTION {|| nMenuItem := 2 } FONT Font1
MENUITEM "Скопировать в поле из буфера обмена" ACTION {|| nMenuItem := 3 } FONT Font1
SEPARATOR
MENUITEM "Выход" ACTION {|| nMenuItem := 0 } FONT Font2 IMAGE "m_Exit32"
END MENU

_ShowContextMenu(cForm, nY, nX, .f. ) // ПОКАЗ ВЫПАДАЮЩЕГО МЕНЮ

Меню появляется на фоне MODAL(1) и таблицу практически не видно.
Почему ? Как сделать, чтобы меню было на фоне CHILD(5) ?
В отдельном примере отрабатывается нормально.

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




Пост N: 6206
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.03.19 19:48. Заголовок: Всем привет ! Никогд..


Всем привет !
Никогда не делал свою простую печать из МиниГуи, всё делал через ФастРепорт.
Да вот понадобилась...
1) Как распечатать содержимое EDITBOX ? Можно записать в файл, а дальше как печатать этот файл ?
Может примеры есть какие ?

2) И ещё один вопрос. Где то на форуме вроде писали об этом.
Как определить в какой кодировке файл/строка ?

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


Пост N: 819
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 24.03.19 20:28. Заголовок: Можно записать в фай..



 цитата:
Можно записать в файл, а дальше как печатать этот файл ?


Я открываю файл в AkelPad ( у него есть все средства для масштабирования, ориентации ) и печатаю.

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


Пост N: 820
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 24.03.19 20:34. Заголовок: Кодировка ru1251..


Кодировка ru1251

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




Пост N: 6207
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.03.19 20:47. Заголовок: У юзера может не уст..


У юзера может не установлен AkelPad и ставить каждому клиенту занятие неблагодарное.
Нужно свой компонент для простой печати и просмотра текстовых файлов.

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



Пост N: 213
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 24.03.19 22:27. Заголовок: Так у Harbour'а ..


Так у Harbour'а есть средства печати :
* Печать из HARBOUR на Windows принтере, который не выводит текстовые        
* данные напрямую
oprn := win_prn():new(GetDefaultPrinter())
oprn:create()
oprn:topmargin := 40
oprn:bottommargin := oprn:PageHeight - oprn:topmargin -10
oprn:startdoc()
oprn:NewLine()
lin_page := 1
for iikk :=1 to 120

oprn:textout (" Печать на принтер"+ str(iikk,32) , .T.)
lin_page := lin_page + 1
if lin_page >= oprn:maxrow()
lin_page := 1
oprn:EndPage(.T.)
oprn:NewLine()
endif
next
oprn:enddoc()

Еще много лет назад записал себе в программу для подсказки, чтоб не рыться в документации

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




Пост N: 6208
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.03.19 22:35. Заголовок: nick_mi пишет: Так ..


nick_mi пишет:

 цитата:
Так у Harbour'а есть средства печати


Вопрос был - свою простую печать из МиниГуи ?

Вот нашёл короткий пример - MiniGUI\SAMPLES\Advanced\PrintRAW\PrintRAW.exe
Но он что-то не работает...

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7029
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.03.19 23:09. Заголовок: Andrey пишет: Вопро..


Andrey пишет:

 цитата:
Вопрос был - свою простую печать из МиниГуи ?


Скорее из Harbour чем из Минигуи

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




Пост N: 2289
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.19 09:37. Заголовок: Dima пишет Скорее из..


Dima пишет
 цитата:
Скорее из Harbour чем из Минигуи


Дима, что не так при печати простенькой из MiniGui ?
Плотно не занимался, но примеры даже с preview есть.
Вот BASIC\PRINT\demo.prg - простенький вывод по листам с preview.

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


Пост N: 821
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 25.03.19 10:22. Заголовок: Andrey У юзера може..


Andrey

 цитата:
У юзера может не установлен AkelPad


Сразу AkelPad включаю в состав комплекта программы. А в программе настроены горячие клавиши, кнопочки для
открытия в редакторе выгруженного файла. Так что, никаких проблем.

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




Пост N: 2290
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.19 13:07. Заголовок: Vlad04 пишет Сразу A..


Vlad04 пишет
 цитата:
Сразу AkelPad включаю в состав комплекта программы.


Сам использую AkelPad в работе, а для клиентов, ставим (с программами) Notepad2.exe (аналог win notepad, только получше). Клиенты воспринимаюn notepad2.exe легче, чем AkelPad
Есть версии 32, 64 ось.

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



Пост N: 214
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 25.03.19 13:29. Заголовок: Andrey пишет: Вопро..


Andrey пишет:

 цитата:
Вопрос был - свою простую печать из МиниГуи ?


Указанная простенькая печать (oprn := win_prn():new(GetDefaultPrinter()) )
работает в том числе и из программы, написанной на HARBOUR c
использованием MINIGUI.

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




Пост N: 2291
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.19 13:47. Заголовок: nick_mi пишет Указан..


nick_mi пишет
 цитата:
Указанная простенькая печать (oprn := win_prn():new(GetDefaultPrinter()) )
работает в том числе и из программы, написанной на HARBOUR c
использованием MINIGUI.


похоже miniprint в hmg сделан на win_prn(), сужу только по одинаково названным методам, только + preview

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




Пост N: 6209
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.03.19 13:56. Заголовок: Понял. Но нашёл врод..


Понял.
Но нашёл вроде ещё простое решение и пилить ничего не надо MiniGUI\SAMPLES\Advanced\PrintRAW
Но что-то не работает пример PRINTRAW.exe
Запускается нормально создаётся файл __testFile.txt - пустой !!!
Ещё создаётся файл _MsgLog.txt с нужной страницей печати.
Печати нет.
Беру и явно в проге меняю:
  //WinPrintRaw(cPrinter, TESTFILE, "Test Print Job") 
cFILE := GetStartUpFolder() + "\_MsgLog.txt"
WinPrintRaw(cPrinter, cFILE, "Test-Print-Job")

Всё равно принтер молчит...
Почему ? Где ошибка ? Может не у всех работает ?

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




Пост N: 2292
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.19 15:22. Заголовок: Andrey У тебя стоит..


Andrey
У тебя стоит, наверно, где то
#define _HMG_OUTLOG
потому _msglog.txt образовался.
У меня сработал пример ок.

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




Пост N: 6210
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.03.19 18:06. Заголовок: SergKis пишет: У ме..


SergKis пишет:

 цитата:
У меня сработал пример ок.


Сразу на печать лист ушёл ? Принтер лазерник ?
Так я тоже делаю сразу печать WinPrintRaw(cPrinter, cFILE, "Test-Print-Job") - не идёт...

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




Пост N: 2293
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.19 18:14. Заголовок: Andrey Под рукой пр..


Andrey
Под рукой принтера нет, но задание для принтера в очередь получил.

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




Пост N: 2294
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.19 18:51. Заголовок: Andrey Пробнули на ..


Andrey
Пробнули на 2х др. pc с принтерами на wifi, как и у тебя полный ноль - нет ни очереди, ничего

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




Пост N: 6211
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.03.19 20:18. Заголовок: Подскажите пожалуйст..


Подскажите пожалуйста - Как определить в какой кодировке файл/строка ?
Вроде писалось на форуме об этом, никак не могу найти.

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 7030
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.03.19 21:48. Заголовок: Andrey пишет: Вроде..


Andrey пишет:

 цитата:
Вроде писалось на форуме об этом, никак не могу найти.



Нашел за 5 секунд
http://clipper.borda.ru/?1-4-0-00000734-000-0-0-1333909105

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




Пост N: 6212
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.03.19 00:39. Заголовок: Dima пишет: Нашел з..


Dima пишет:

 цитата:
Нашел за 5 секунд


Спасибо Дима.

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




Пост N: 1477
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.03.19 11:09. Заголовок: SergKis пишет: как ..


SergKis пишет:

 цитата:
как и у тебя полный ноль - нет ни очереди, ничего


Для печати с использованием функции WinPrintRaw() требуется принтер, который поддерживает такой тип печати.
По-видимому, современные принтеры уже не имеют этой возможности

Поэтому рекомендую посмотреть универсальный пример печати текстового файла, который находится в папке
samplrs\Basic\MiniPrint_3

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




Пост N: 6215
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.03.19 12:17. Заголовок: Спасибо Григорий ! ..


Спасибо Григорий !

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




Пост N: 6229
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.04.19 14:51. Заголовок: Всем привет. Ошибка ..


Всем привет.
Ошибка начала появляться в работающей программе с 2017 года.
Ранее таких ошибок не появлялось... Что-то в новой версии появилась такая ошибка.
Вот лог-ошибки:
Error MGERROR/0 Window: unrecognized property 'MESSAGE'. Program terminated.
Called from MSGMINIGUIERROR(99) in module: h_error.prg
Called from SETPROPERTY(3785) in module: h_controlmisc.prg
Called from (b)WAIT_WINDOW_MY(266) in module: Source\WaitWin.prg
Called from _PROCESSINITPROCEDURE(1672) in module: h_windows.prg
Called from _ACTIVATEWINDOW(1487) in module: h_windows.prg
Called from WAIT_WINDOW_MY(315) in module: Source\WaitWin.prg
Called from WAITWINDOWERROR(157) in module: Source\WaitWin.prg


Вот код программы:
Скрытый текст

Почему ?

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




Пост N: 1483
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.04.19 15:00. Заголовок: Andrey пишет: Почем..


Andrey пишет:

 цитата:
Почему ?


SetFocus - это метод, а не свойство

Д.б.


 цитата:
DoMethod( cFrmName, "Message", "Setfocus" )




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




Пост N: 6230
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.04.19 18:34. Заголовок: Блин, точно ! :sm12..


Блин, точно !
Раньше работало, я сейчас синтаксис стал строже...
Спасибо Григорий !

А для Tsbrowse тоже нужно исправлять на метод ?
Раньше писал так - Setproperty( "Form_3Tst", oBrw, "Setfocus" ) и всё работало вроде ...

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




Пост N: 6235
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.04.19 18:28. Заголовок: Всем привет ! Как и..


Всем привет !

Как изменить свойства у кнопке на форме, т.е. нужно поменять иконки на кнопке ?
          cIco1x1 := "iUsb64x1"  ;  cIco1x2 := "iUsb64x2" 
......
@ ... BUTTONEX BUTTON_Copy .... ;
ICON cIco1x1 ... ;
.... FLAT NOXPSTYLE HANDCURSOR NOTABSTOP ;
BACKCOLOR aGrOverB1 GRADIENTFILL aGrFillB1 ;
ON MOUSEHOVER ( This.Fontcolor := GRAY , This.GradientFill := aGrFillB1 , This.Icon := cIco1x2) ;
ON MOUSELEAVE ( This.Fontcolor := BLACK , This.GradientOver := aGrOverB1 , This.Icon := cIco1x1) ;
ACTION ....

Нужно заменить иконки у свойств: ON MOUSEHOVER и ON MOUSELEAVE ?

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




Пост N: 1486
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.04.19 21:11. Заголовок: Andrey пишет: Нужно..


Andrey пишет:

 цитата:
Нужно заменить иконки у свойств: ON MOUSEHOVER и ON MOUSELEAVE


Попробуй

 цитата:

ON MOUSEHOVER ( This.Fontcolor := GRAY , This.GradientFill := aGrFillB1 , This.Picture := cIco1x2) ;
ON MOUSELEAVE ( This.Fontcolor := BLACK , This.GradientOver := aGrOverB1 , This.Picture := cIco1x1) ;



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




Пост N: 6236
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.04.19 21:18. Заголовок: Не понял... Кнопка ..


Не понял...
Кнопка в программе показывается с одними иконками, при наступление нужного события,
нужно на этой же кнопке заменить иконки.
Как к этому свойству обращаться ?
       SetProperty( ThisWindow.Name, "BUTTON_Copy", "????", ??? )   

Или нужно удалять этот объект BUTTON_Copy и строить его заново на форме ?

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




Пост N: 1487
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.04.19 21:27. Заголовок: Andrey пишет: Не по..


Andrey пишет:

 цитата:
Не понял...


Вот рабочий код из примера Basic\ButtonEx
// horizontal buttonex with icon 

@ 135 + 35 + 40, 5 + 82 + 30 BUTTONEX OButton_4 ;
CAPTION "&Login" ;
ICON "res\keys.ico" ;
FLAT WIDTH 80 HEIGHT 30 FONT "MS Sans serif" SIZE 9 ;
FONTCOLOR BLUE ;
BOLD ;
BACKCOLOR WHITE ;
on mousehover this.Picture := 'res\globus.ico';
on mouseleave this.Picture := 'res\keys.ico';

ACTION {|| Tone( 800 ) } TOOLTIP "BUTTONEX 4 with ICON - horizontal"


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




Пост N: 6237
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.04.19 00:28. Заголовок: Мне нужно изменить н..


Мне нужно изменить на форме уже показываемую кнопку.
Сделаем модификацию:

 
aGrFillB1 := { { 0.5, CLR_OK , CLR_WHITE }, { 0.5, CLR_WHITE , CLR_OK } }
aGrOverB1 := { { 0.5, CLR_ORANGE, CLR_YELLOW }, { 0.5, CLR_YELLOW, CLR_ORANGE } }
cIco1x1 := "res\Usb64x1.ico" ; cIco1x2 := "res\Usb64x2.ico"

@ 135 + 35 + 40, 5 + 82 + 30 BUTTONEX OButton_4 ;
CAPTION "&Copy USB" ;
ICON "res\Usb64x1.ico" ;
......
BACKCOLOR aGrOverB1 GRADIENTFILL aGrFillB1 ;
ON MOUSEHOVER ( This.Fontcolor := GRAY , This.GradientFill := aGrFillB1 , This.Icon := cIco1x2) ;
ON MOUSELEAVE ( This.Fontcolor := BLACK , This.GradientOver := aGrOverB1 , This.Icon := cIco1x1) ;
ACTION {|| ChangeButton(ThisWindow.Name, This.Name) }

Function ChangeButton(cForm, cObj)

SetProperty( cForm, cObj, "Caption", "новая иконка" )
SetProperty( cForm, cObj, "Icon", "res\new1.ico" )
SetProperty( cForm, cObj, "????", ??? ) // для on mousehover
SetProperty( cForm, cObj, "????", ??? ) // для on mouseleave

Return Nil

И как сохранить This.Fontcolor, This.GradientFill, This.GradientOver установленные первоначально на кнопке ?

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




Пост N: 2331
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.19 09:20. Заголовок: Andrey пишет Мне нуж..


Andrey пишет
 цитата:
Мне нужно изменить на форме уже показываемую кнопку


Как то так (твой пример MsgEdit.prg)
 
LOCAL cI1, cI2
...
nX := nWidth - nWBtn*3 - nG*3
@ nY, nX BUTTONEX Btn_Prn WIDTH nWBtn HEIGHT nHBtn CAPTION aBtnCapt[1] ICON aBtnIco[1,1] ;
NOHOTLIGHT NOXPSTYLE HANDCURSOR FONT cBtnFN SIZE nBtnFS BOLD ;
FONTCOLOR aBtnFClr BACKCOLOR aBtnBClr[1] ;
ON MOUSEHOVER ( This.Backcolor := BLACK , This.Fontcolor := YELLOW, This.Icon := cI1 ) ;
ON MOUSELEAVE ( This.Backcolor := aBtnBClr[1], This.Fontcolor := WHITE , This.Icon := cI2 ) ;
ACTION {|| MsgDebug("Подключить самостоятельно из MiniGUI\SAMPLES\Basic\MiniPrint_3"),;
This.Cargo[1] := 2, ;
cI1 := iif( This.Cargo[1] == 1, This.Cargo[2], This.Cargo[4] ), ;
cI2 := iif( This.Cargo[1] == 1, This.Cargo[3], This.Cargo[5] ), ;
this.Lbl0.Setfocus } ;
ON INIT {|| This.Cargo := Array(5), This.Cargo[1] := 1, ;
This.Cargo[2] := aBtnIco[1,2], ;
This.Cargo[3] := aBtnIco[1,1], ;
This.Cargo[4] := aBtnIco[2,2], ;
This.Cargo[5] := aBtnIco[2,1], ;
cI1 := This.Cargo[2], ;
cI2 := This.Cargo[3] ;
}

Аналогично можно поступить и с др. свойствами кнопки, увеличив кол-во элементов в This.Cargo массиве

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




Пост N: 2332
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.19 09:53. Заголовок: PS Точнее (без перем..


PS
Точнее (без переменных LOCAL) можно так
 
@ nY, nX BUTTONEX Btn_Prn WIDTH nWBtn HEIGHT nHBtn CAPTION aBtnCapt[1] ICON aBtnIco[1,1] ;
NOHOTLIGHT NOXPSTYLE HANDCURSOR FONT cBtnFN SIZE nBtnFS BOLD ;
FONTCOLOR aBtnFClr BACKCOLOR aBtnBClr[1] ;
ON MOUSEHOVER ( This.Backcolor := BLACK , This.Fontcolor := YELLOW, This.Icon := This.Cargo[2] ) ;
ON MOUSELEAVE ( This.Backcolor := aBtnBClr[1], This.Fontcolor := WHITE , This.Icon := This.Cargo[3] ) ;
ACTION {|| MsgDebug("Подключить самостоятельно из MiniGUI\SAMPLES\Basic\MiniPrint_3"),;
This.Cargo[1] := iif( This.Cargo[1] == 1, 2, 1 ), ;
This.Cargo[2] := iif( This.Cargo[1] == 1, This.Cargo[4], This.Cargo[6] ), ;
This.Cargo[3] := iif( This.Cargo[1] == 1, This.Cargo[5], This.Cargo[7] ), ;
this.Lbl0.Setfocus } ;
ON INIT {|| This.Cargo := Array(7), This.Cargo[1] := 1, ;
This.Cargo[2] := aBtnIco[1,2], ;
This.Cargo[3] := aBtnIco[1,1], ;
This.Cargo[4] := aBtnIco[1,2], ;
This.Cargo[5] := aBtnIco[1,1], ;
This.Cargo[6] := aBtnIco[2,2], ;
This.Cargo[7] := aBtnIco[2,1] ;
}

После ACTION смена иконок на кнопке

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




Пост N: 6238
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.04.19 11:10. Заголовок: SergKis пишет: Точн..


SergKis пишет:

 цитата:
Точнее (без переменных LOCAL) можно так


Да уж ... Ни за что бы не догадался...
Заработало ! Спасибо БОЛЬШОЕ !
Только вот не совсем понимаю как сделать смену иконки в другой функции ?
Вот так у меня ранее было:
 
FUNCTION MyInitFormMain()

// Отключить копирование на флешку
IF M->lPubFlaskaNot
M->lFlash := .F.
Form_Main.Button_Copy.Caption := "Создать архив и" + CRLF + "копировать на ДИСК"
Form_Main.Button_Copy.Icon := "iHDD64"
ELSE
M->lFlash := .T.
Form_Main.Button_Copy.Caption := "Создать архив и" + CRLF + "копировать на флешку"
Form_Main.Button_Copy.Icon := "iCopyUsb"
ENDIF

RETURN NIL


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




Пост N: 2333
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.19 11:44. Заголовок: Andrey Похоже у теб..


Andrey
Похоже у тебя hover-ов нет, если это на action Button_Copy, то замени Form_Main.Button_copy. на This.
Если есть, то положи иконки в Cargo, как в примере (по 2е пары) и добавь в action
This.Caption := iif( This.Cargo[1] == 1, "Создать ... на ДИСК", "Создать ... на флешку" )
Но телепатов нет додумывать

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




Пост N: 6240
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.04.19 11:51. Заголовок: SergKis пишет: Похо..


SergKis пишет:

 цитата:
Похоже у тебя hover-ов нет,


Есть ховеры, просто я код переделываю на новый с ховерами.
А функция MyInitFormMain() после инициализации формы отрабатывает.
Вот и не знаю как сделать:
    IF M->lPubFlaskaNot  
// показ иконки "iHDD64x1" и "iHDD64x2"
ELSE
// показ иконки "iCopyUsbx1" и "iCopyUsbx2"
ENDIF

Просто после изменения (по кнопке Настройка программы), мне нужно сменить показ иконок,
т.е. я вызываю эту функцию - MyInitFormMain().
на кнопке Button_Copy я сделаю:
          ON INIT {|| This.Cargo := Array(7), This.Cargo[1] := M->lPubFlaskaNot, ;  
This.Cargo[2] := aBtnIco[1,2], ;
This.Cargo[3] := aBtnIco[1,1], ;
This.Cargo[4] := aBtnIco[1,2], ;
This.Cargo[5] := aBtnIco[1,1], ;
This.Cargo[6] := aBtnIco[2,2], ;
This.Cargo[7] := aBtnIco[2,1] ;
}

А как сменить иконки ?

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




Пост N: 2334
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.19 12:25. Заголовок: Andrey MsgEdit.prg ..


Andrey
MsgEdit.prg - твой пример и что ты засовывал в массив aBtnIco по элеметам, тебе лучше знать.
Посмотри, что там и сделай по аналогии для выше указанных парных иконок

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




Пост N: 2336
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.19 12:35. Заголовок: Andrey пишет Просто ..


Andrey пишет
 цитата:
Просто после изменения (по кнопке Настройка программы), мне нужно сменить показ иконок


Делай сразу на кнопке "Copy", сначала к примеру Copy to disk, кликнули по ней -> Copy to USB
зачем лишняя кнопка "Настройка"
Добавь только TOOLTIP "Уточните куда COPY" или более развернуто

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




Пост N: 6242
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.04.19 12:43. Заголовок: Как получить/изменит..


Как получить/изменить This.Cargo из другой функции:
  This.Cargo[2] := iif( M->lPubFlaskaNot, This.Cargo[4], This.Cargo[6] ), ;  
This.Cargo[3] := iif( M->lPubFlaskaNot, This.Cargo[5], This.Cargo[7] ), ;

Т.е. как можно сделать ?
    SetProperty( cForm, "Button_Copy", "Cargo", ??? )  // для on mousehover  
SetProperty( cForm, "Button_Copy", "Cargo", ??? ) // для on mouseleave

Не знаю как правильно сделать:
    SetProperty( cForm, "Button_Copy", "Cargo", iif( M->lPubFlaskaNot, Button_Copy.Cargo[4], Button_Copy.Cargo[6] ) )   
SetProperty( cForm, "Button_Copy", "Cargo", iif( M->lPubFlaskaNot, Button_Copy.Cargo[5], Button_Copy.Cargo[7] ) )


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




Пост N: 6243
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.04.19 12:45. Заголовок: SergKis пишет: Дела..


SergKis пишет:

 цитата:
Делай сразу на кнопке "Copy", сначала к примеру Copy to disk, кликнули по ней -> Copy to USB
зачем лишняя кнопка "Настройка"


Да там несколько настроек для проги.
А отображение иконки связано со сменой переменной M->lPubFlaskaNot.
Дополнительный запрос юзеру совсем не нужен.

Давай сделаю тест, чтобы понятней было ?

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




Пост N: 2337
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.19 12:52. Заголовок: Andrey Ты не первый..


Andrey
Ты не первый год замужем на MiniGui, основы запомни или запиши и держи под рукой (в help смотри почаще по командам).
Забыл, посмотри i_this.ch, i_window.ch
Трудно, поставь получение ppo файла и посмотри как там меняется псевдо ООП на функции
Получается ты просто копипастишь все подряд ничего не понимая
Разберись разок до конца

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




Пост N: 6244
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.04.19 14:49. Заголовок: Спасибо ОГРОМНОЕ ! ..


Спасибо ОГРОМНОЕ !
Теперь понял как делать.
Для тех кому интересно, привожу код:
Скрытый текст


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


Пост N: 822
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 11.04.19 19:31. Заголовок: Мы не ищем легкий пу..


Мы не ищем легкий путей!
Стоит

 цитата:

CHECKBOX Check_1 CAPTION 'Сменить иконку' ;


задача которого сменить Иконку !!!
А может поставить COMBOBOX и им определить направление копирования ?

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




Пост N: 2339
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.19 20:15. Заголовок: Vlad04 пишет А может..


Vlad04 пишет
 цитата:
А может поставить COMBOBOX и им определить направление копирования ?


Это всего лишь пример https://TransFiles.ru/f1eyd

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




Пост N: 6245
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.04.19 23:19. Заголовок: Опять непонятка... Б..


Опять непонятка...
Беру пример C:\MiniGUI\SAMPLES\BASIC\COLORED_TAB\demo.prg

Добавляю вверху исходника строку:
 
#define EMAIL2 'gfilatov@inbox.ru'

Далее добавляю объект:
		PAGE 'Page &5' IMAGE 'Check' TOOLTIP 'TabPage 5' 

@ 24, 2 LABEL Page_5 VALUE "" WIDTH 0 HEIGHT 0 BACKCOLOR aTabColors[ 5 ]

@ 70, 55 HYPERLINK Label_Link ;
VALUE "<" + EMAIL2 + ">" ;
ADDRESS EMAIL2 + "?cc=&bcc=" + ;
"&subject=Programm%20testing%20%20MiniGui%20!" ;
WIDTH 300 HEIGHT 30 ;
BACKCOLOR aTabColors[ 5 ] ;
TOOLTIP "Отправить письмо MiniGui" ;
HANDCURSOR

END PAGE

END TAB

Прога перестаёт работать, падает с ошибкой:
Error BASE/1081 Argument error: +
Called from GETCONTROLINDEX(1005) in module: h_controlmisc.prg
Called from _SETADDRESS(55) in module: h_hyperlink.prg
Called from SETTAB_1(135) in module: demo.prg
Called from MAIN(46) in module: demo.prg


В другом месте этот HYPERLINK работает. А совместно с цветным TAB - нет. Почему ?

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




Пост N: 1488
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.19 10:21. Заголовок: Andrey пишет: ..


Andrey пишет:

 цитата:
@ 70, 55 HYPERLINK Label_Link ;
VALUE "<" + EMAIL2 + ">" ;
ADDRESS EMAIL2 + "?cc=&bcc=" + ;
"&subject=Programm%20testing%20%20MiniGui%20!" ;
WIDTH 300 HEIGHT 30 ;
BACKCOLOR aTabColors[ 5 ] ;
TOOLTIP "Отправить письмо MiniGui" ;
HANDCURSOR


Добавь указание родительского окна в определение этого HYPERLINK

 цитата:
@ 70, 55 HYPERLINK Label_Link OF Form_1 ;




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




Пост N: 6246
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.04.19 14:22. Заголовок: СПАСИБО Григорий ! ..


СПАСИБО Григорий !

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




Пост N: 6254
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.04.19 21:46. Заголовок: Хорошие функции для ..


Хорошие функции для получения картинок типа файлов:
         hIcon := ICON_EXEREAD( cFile )  
hBmp := BmpFromIcon( hIcon ) // a return handle bmp

Только вот возвращают картинки 32х32.
А можно сделать, чтобы возвращались картики 64х64 ?

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




Пост N: 6258
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.04.19 14:29. Заголовок: Есть большой лог оши..


Есть большой лог ошибок ErrorLog.htm
Просматривать вручную его ОЧЕНЬ ДОЛГО...
Как бы сделать с него выборку:
Date: 10.04.19 Time: 21:25:30
Error MGERROR/0 Control: PrgBar_1 Of Form_Index Not defined. Program terminated.
Called from - выборку ошибок 5 или 7 уровней.

Может сделать бы стандартный компонент в МиниГуи для этого ?
В виде дерева будет наверное очень удобно !

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




Пост N: 2374
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.04.19 15:47. Заголовок: Andrey Может достат..


Andrey
Может достаточно будет в программе переименовывать (раз в несколько дней\недель\...)
Но сделать можешь "компонент" на весь файл, думаю возражений не будет

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




Пост N: 6259
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.04.19 20:26. Заголовок: Всем привет ! Что-то..


Всем привет !
Что-то столкнулся с потерей фокуса на модальном окне.
На главной таблице вызываю окно печати (MODAL), в этом окне своя таблица,
в ней делаются вызов другой функции так:
         SetProperty(oBrwP:cParentWnd, oBrwP:cControlName, "Enabled", .F.) //блокируем меню 
cRet := &cRun(....) // вызов внешних функций
SetProperty(oBrwP:cParentWnd, oBrwP:cControlName, "Enabled", .T.) //разлокируем меню

Вызываю функцию, в ней вызываю MODAL-окно, там выбираю и закрываю это окно,
далее вызываю ещё MODAL-окно c таблицей, потом его закрываю.
В результате теряю фокус на окно печати (MODAL), оно оказывается под главной таблицей.
И теперь можно ходить по главной таблице, хотя окно печати (MODAL) !
И прога начинает вылетать в других местах.
Юзер в ауте, я тоже.
Как исправить эту ситуацию ?
Сергей, ты писал что так блокировать таблицу не правильно, я этот вопрос оставил на потом.
И вот этот вопрос вылез у меня.

P.S. Если один раз вызывать MODAL-окно, то всё работает отлично,
если 2 раза, то теряется фокус и начинается фигня.

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




Пост N: 2389
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.04.19 21:01. Заголовок: Andrey пишет ты писа..


Andrey пишет
 цитата:
ты писал что так блокировать таблицу не правильно, я этот вопрос оставил на потом


Неправильно, т.к. tsbrowse (это объект) имеет собственную блокировку
oBrw:lEnabled := .T.\.F.
oBrw:Enabled( lEnable ) - с закраской тсб

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




Пост N: 6264
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.04.19 16:52. Заголовок: Разобрался наконец т..


Разобрался наконец то со своей (или не моей) ошибкой ...
Так портачит, что даже окно в коде принудительно не закрывается, например так Form_F5.Release

Может неправильный код с потоками, я не знаю.
Вот такая конструкция ломает в дальнейшем код:
 
// если было вызвано последнее окно MODAL, то вернёт .T.
MsgDebug( "_HMG_IsModalActive=", _HMG_IsModalActive ) -->> .T.

TestModalWindows()

// если было вызвано последнее окно MODAL, то вернёт .T.
MsgDebug( "_HMG_IsModalActive=", _HMG_IsModalActive ) -->> .F.
.....

FUNCTION TestModalWindows()
....
WaitThreadCreate( "загрузка отчёта" )
.....
DEFINE WINDOW Form_Modal ;
.....
MODAL ;
.....
ON INIT {|| WaitThreadClose(), DoMethod('Form_Modal', 'Butt_Exit', 'Setfocus') }

Пример функции WaitThreadCreate() в папке C:\MiniGUI\SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg
Где и что править в demo2.prg я не знаю ?

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




Пост N: 6277
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.04.19 18:39. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Да, есть. Это WinAPI функция GetPixel().
Рабочий пример ее использования см. в папке samples\Advanced\FillTriangle


Переделал эту функцию вот так:
 
Function RowColColorRGB(nRow,nCol)
LOCAL hdc, cMsg, aColor := {0,0,0}
LOCAL hWin := ThisWindow.Handle

hdc := GetDC( hWin )
//x := _HMG_MouseCol
//y := _HMG_MouseRow
IF GetPixelColor( hdc, nCol, nRow, @aColor )
cMsg := "RGB (" ;
+ " r:" + str(aColor[1], 3 ) ;
+ " g:" + str(aColor[2], 3 ) ;
+ " b:" + str(aColor[3], 3 ) ;
+ " )"
//MsgDebug( cMsg )
ENDIF
ReleaseDC( hWin, hdc )

Return aColor

Всегда чёрный цвет возвращает. Что то я не так переделал...
Как правильно сделать

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




Пост N: 6299
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.05.19 00:20. Заголовок: Всем привет ! Очеред..


Всем привет !
Очередная непонятка с работой на различных платформах.
Сделал универсальное затенение окна (пример отправлен Григорию в библиотеку для всех)
Работает отлично на Win ХР/8.1/10/Server 2012, а на Server 2008 не захватывает верх окна.
Вот так выглядит на экране Windows Server 2008 R2 Standart:


С чем это связано ?

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




Пост N: 6309
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.06.19 17:19. Заголовок: В разных меню исполь..


В разных меню испольую по разному стиль меню и высоту иконок, типа:
      SET MENUSTYLE EXTENDED 
SetMenuBitmapHeight( 48 )

Есть ли функции установки - какой стиль стоит и какой размер иконок ?

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




Пост N: 2593
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.06.19 17:42. Заголовок: Andrey i_menu.ch #xc..


Andrey
i_menu.ch
 
#xcommand SET MENUSTYLE EXTENDED ;
=> ;
_NewMenuStyle ( .T. )

#xcommand SET MENUSTYLE STANDARD ;
=> ;
_NewMenuStyle ( .F. )

#translate IsExtendedMenuStyleActive () ;
=> ;
_NewMenuStyle ()
...
c_menu.c
HB_FUNC( SETMENUBITMAPHEIGHT )
{
bm_size = hb_parni( 1 );
min_height = min_width = bm_size + 4;
hb_retni( bm_size );
}

HB_FUNC( GETMENUBITMAPHEIGHT )
{
hb_retni( bm_size );
}
...


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




Пост N: 6311
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.06.19 18:47. Заголовок: SergKis пишет: i_me..


SergKis пишет:

 цитата:
i_menu.ch


Спасибо БОЛЬШОЕ !

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




Пост N: 6312
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.06.19 18:56. Заголовок: А можно как то сокра..


А можно как то сократить текст программы ?
 // если было вызвано последнее окно MODAL, то вернёт .T. 
lModal := _HMG_IsModalActive

If lModal

DEFINE WINDOW &cFrmName ;
.....
MODAL ;
....
Else

DEFINE WINDOW &cFrmName ;
.....
WINDOWTYPE STANDARD ;
....
Endif


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




Пост N: 2594
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.06.19 10:56. Заголовок: Andrey пишет А можно..


Andrey пишет
 цитата:
А можно как то сократить текст программы ?


Поднял свои опыты на эту тему, покрути, если хочешь Скрытый текст


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




Пост N: 6313
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.06.19 20:11. Заголовок: SergKis пишет: Подн..


SergKis пишет:

 цитата:
Поднял свои опыты на эту тему, покрути, если хочешь


Не совсем то ...
Хотелось бы типа такого:
    WINDOWTYPE IIF( lModal == .T., MODAL , STANDARD ) ; 

Или возможности опледелить ТИП окна отдельной командой.
Ну да ладно, если нет такого, будем писать как все.

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




Пост N: 2598
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.19 20:55. Заголовок: Andrey пишет Или воз..


Andrey пишет
 цитата:
Или возможности опледелить ТИП окна отдельной командой.


А смысл в переменной ?
В данном случае, при запуске из под модал, окно будет всегда модал, что бы ты не писал в WINDOWTYPE.
Т.е. пиши STANDART или CHILD всегда, к примеру (в функции), но вызов этой же функции из под модал ->
будет тип окна modal, т.к. modal := modal .or. ! Empty( _HMG_IsModalActive ).
Если надо усложнить добавь в #xcommand переменную WTYPE <nTyp> и в ф-ю параметр nTyp и обрабатывай как надо
 
#xcommand DEF WINDOW <w> ;
...
[ WTYP <nTyp> ] ;
...
=> ;
DECLARE WINDOW <w> ;;
_DefWindow ( <"w">, ... , <clientheight>, <.modal.>, <.flashexit.>, <nTyp> )
...
FUNCTION _DefWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, ;
...
clientwidth, clientheight, modal, flashexit, nTyp )
...
If HB_ISNUMERIC( nTyp )
// ставь лог. переменные как надо
EndIf

If modal
...
или еще как душе будет угодно.


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




Пост N: 2599
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.19 21:01. Заголовок: PS nTyp это, к приме..


PS
nTyp это, к примеру
0 - main
1 - standatt
2 - child
3 - modal

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




Пост N: 6314
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.19 13:34. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если надо усложнить добавь в #xcommand переменную WTYPE <nTyp> и в ф-ю параметр nTyp и обрабатывай как надо


Понял, СПАСИБО !

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




Пост N: 6315
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.19 16:36. Заголовок: Собираю тестовые про..


Собираю тестовые проги в Far'e на МиниГуи.
После того как ехе-ник запустится, каждый раз приходится мышкой тыкать на запущенную прогу, т.к.
Far всегда поверх запущенной программы.
Можно ли как то сделать, чтобы после запуска программа МиниГуи выходила на передний план ?
У меня тестовые проги имеют код такой (специфика тестирования):
 
DEFINE WINDOW Form_Main ;
AT 20 , 20 ;
WIDTH 500 HEIGHT 480 ;
TITLE "Test-MiniGui" ;
MAIN ;
.....
ON INIT {|| Form_Main.Minimize, TestPrint("Печать",,,cDebugPath) , Form_Main.Release }
....

Т.е. далее запускается TestPrint("Печать",,,cDebugPath) и это окно всегда под Far'ом.
Я знаю что можно сделать в окне TestPrint() следующую конструкцию:
   DEFINE WINDOW wTestPrint ; 
....
MODAL
....
END WINDOW

CENTER WINDOW wTestPrint // переносим сюда, чтобы не дергалось окно
ACTIVATE WINDOW wTestPrint ON INIT {|| This.Minimize, This.Restore, ;
This.Label_0.SetFocus }

RETURN NIL

Но потом после переноса в основную программу, это окно wTestPrint появляется снизу - это не совсем красиво для основной программы.
Можно как то сделать "передёргивание окна wTestPrint" из основной программы ?

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




Пост N: 6316
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.19 19:55. Заголовок: Сделал так: ..


Сделал так:
Скрытый текст

В Win8.1 отрабатывает нормально, а в WinXP окошко сворачивается и разворачивается - остановить нельзя...
Бесконечный цикл, можно только снять программу через менеджер программ.
Почему остановка таймера не происходит ?

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




Пост N: 2603
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.06.19 20:37. Заголовок: Andrey Добавь в TIM..


Andrey
Добавь в TIMER параметр ONCE (вып. один раз) см. i_timer.ch
А topmost пробовал ?
 
DEFINE WINDOW wTestPrint ;
...
ON INIT This.Topmost := .F. ;
...
ACTIVATE WINDOW wTestPrint ON INIT {|| This.Minimize, This.Restore, This.Topmost := .T., ;
This.Label_0.SetFocus }


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




Пост N: 6317
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.19 21:27. Заголовок: Что то в доке нет ON..


Что то в доке нет ONCE !
Как писать правильно ?
 
DEFINE TIMER Timer_1 ;
INTERVAL 500 ;
ACTION Bring_window_to_front() ONCE

Так ?

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




Пост N: 2604
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.06.19 21:33. Заголовок: Andrey i_timer.ch#c..


Andrey
i_timer.ch
#command DEFINE TIMER <name> ; 
[ <dummy1: OF, PARENT> <parent> ] ;
[ INTERVAL <interval> ] ;
[ ACTION <action> ] [ <lOnce: ONCE> ] ;
=> ;
_DefineTimer ( <"name">, <"parent">, <interval>, <{action}>, <.lOnce.> )


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




Пост N: 6318
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.19 21:40. Заголовок: Да так сработало ! Н..


Да так сработало !
На XP и 8-ке работает теперь одинаково !
СПАСИБО БОЛЬШОЕ !

SergKis пишет:

 цитата:
А topmost пробовал ?


Пробовал так:
 
DEFINE WINDOW wTestPrint ;
...
ON INIT {|| OnInitPrintF5(), This.Topmost := .F., oBrwP:Setfocus() }
...
ACTIVATE WINDOW wTestPrint ON INIT {|| This.Topmost := .T. }

Окно на переднем плане, т.е. поверх Far'a, но при прокрутке колесиком мышки - ездит по папкам Far'a.
Лучший вариант для отладки всё таки таймер !

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




Пост N: 2605
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.06.19 23:24. Заголовок: Andrey Попробуй так..


Andrey
Попробуй так (с SET OOP ON)
 
DEFINE WINDOW wTestPrint ;
...
ON INIT ( This.Topmost := .F., _wPost(1), DoEvents() )
...
(This.Object):Event(1, {|| OnInitPrintF5(), oBrwP:Setfocus() })
END WINDOW
ACTIVATE WINDOW wTestPrint ON INIT {|| This.Topmost := .T. }


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




Пост N: 2606
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.19 07:39. Заголовок: PS И Form_Main попра..


PS
И Form_Main поправь
 
DEFINE WINDOW Form_Main ;
AT 20 , 20 ;
WIDTH 500 HEIGHT 480 ;
TITLE "Test-MiniGui" ;
MAIN ;
.....
ON INIT ( This.Minimize, _wPost(1), DoEvents() )
...
(This.Object):Event( 1, {|| TestPrint("Печать",,,cDebugPath) , This.Release } )
....


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




Пост N: 6319
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.06.19 14:59. Заголовок: Сделал ! Всё равно к..


Сделал !
Всё равно колесико мышки и клавиши продолжают ездить по Far'у.
Хотя окно программы Минигуи становится поверх всех окон.
Нужно кликнуть мышкой по форме, тогда на ней можно нажимать клавиши и мышку.
Вообще то я с таким поведением давно сталкиваюсь, но всё некогда было разобраться с таким поведением.

И ещё ошибка появилась, при выходе из окна wTestPrint, у меня на кнопку выход назначено:
ACTION { || wTestPrint.Release() } 

Выдает теперь ошибку:
Error MGERROR/0 Control: Of Form_Main Not defined. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(99) in module: h_error.prg
Called from DOMETHOD(5205) in module: h_controlmisc.prg
Called from (b)MAIN(349) in module: f5main.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from TWNDDATA:DOEVENT(667) in module: h_objects.prg
Called from DO_ONWNDLAUNCH(234) in module: h_objmisc.prg
Called from (b)INIT(123) in module: h_init.prg
Called from EVENTS(1215) in module: h_events.prg
Called from DOEVENTS(0)
Called from (b)MAIN(323) in module: f5main.prg
Called from _PROCESSINITPROCEDURE(1672) in module: h_windows.prg
Called from _ACTIVATEWINDOW(1487) in module: h_windows.prg
Called from MAIN(354) in module: f5main.prg

 
Строка 349 - (This.Object):Event( 1, {|| TestPrint("Печать",,,cDebugPath) , This.Release } )
Строка 354 - ACTIVATE WINDOW Form_Main

This.Release - не срабатывает ....

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




Пост N: 6320
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.06.19 18:39. Заголовок: А есть такая команда..


А есть такая команда, которая бы эмулировала нажатие мышки на окне, чтобы фокус окну переходил ?

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




Пост N: 2619
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.07.19 11:00. Заголовок: Возможно, будет инте..


Возможно, будет интересно.
Пример по окнам с DEF WINDOW ... и WTYPE nTypWindow :
0 - main
1 - child
2 - modal
3 - standart
и галочка для :Action := .T.\.F. окна
Если галочки нет, окно не активно и сообщения не работают, убрать окно по [X] крестику нельзя, кнопки не работают.
Если галочка есть, окно активно и все кнопки работают.
Пример тут https://TransFiles.ru/s4x9y

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




Пост N: 6322
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.07.19 15:52. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Пример по окнам с DEF WINDOW ... и WTYPE nTypWindow :


Пример интересный !
Можно применять в ситуациях, когда юзеру нужно запретить выходить из окна пока все GETBOX не заполнит
или пока что-то не посчитается....
Применений много.
Спасибо !

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




Пост N: 6323
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.07.19 14:15. Заголовок: Всем привет ! Появил..


Всем привет !
Появилась ошибка у меня после изменения кода. Правда не всегда появляется.
Error BASE/1004 Message not found: NIL:EVENT
--------------------------------- Stack Trace ---------------------------------
Called from __ERRRT_SBASE(0)
Called from NIL:ERROR(0)
Called from (b)HBOBJECT(0)
Called from NIL:MSGNOTFOUND(0)
Called from NIL:EVENT(0)
Called from FORM_F5PRINT(191) in module: Source\form_f5print.prg
Called from FORMPRINTF5(106) in module: Source\form_f5print.prg

Код программы:
 
DEFINE WINDOW Form_F5 ;
.....
MODAL ;
.....
ON INIT ( This.Topmost := .F., _wPost(1), DoEvents() )

(This.Object):Event(1, {|| OnInitPrintF5(),; oBrwP:Setfocus(), nStaticViewRecno := 1 }) // строка 191

Почему и что нужно править ?

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




Пост N: 2622
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.07.19 15:22. Заголовок: Andrey пишет Появила..


Andrey пишет
 цитата:
Появилась ошибка у меня после изменения кода


NIL:EVENT(0) - нет объекта окна. Он создается в DEFINE WINDOW ...
SET OOP ON стоит, не отключен ?

#define _HMG_OUTLOG

LOCAL oWnd
...
DEFINE WINDOW Form_F5 ;
...

oWnd := This.Object

? This.Name, This.Handle, oWnd, _HMG_lOOPEnabled

oWnd:Event(1, {|| OnInitPrintF5(),; oBrwP:Setfocus(), nStaticViewRecno := 1 })

выделенным цветом это опечатка ?

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




Пост N: 6324
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.07.19 18:20. Заголовок: SergKis пишет: выде..


SergKis пишет:

 цитата:
выделенным цветом это опечатка ?


Да, опечатка.
SergKis пишет:

 цитата:
SET OOP ON стоит, не отключен ?


Перепроверю.

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




Пост N: 6327
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.07.19 20:49. Заголовок: В основной программе..


В основной программе не стоит у меня SET OOP ON .
А везде в других стоит. Пропустил наверное.
Буду проверять заново.
СПАСИБО БОЛЬШОЕ !

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




Пост N: 6331
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.07.19 18:01. Заголовок: Всем привет. Непонят..


Всем привет.
Непонятка возникла по окнам.
Делаю форму:
 
DEFINE WINDOW Form_Calc ;
......
WINDOWTYPE STANDARD ;

с неё вызываются допустим 3 окна:
   cFormName  := "WinMemo_" + HB_NtoS( _GetId() )  
DEFINE WINDOW &cFormName ;
......
WINDOWTYPE STANDARD ;

После выхожу с формы Form_Calc и прога падает с ошибкой:
Error MGERROR/0 Window: Form_Calc is not defined. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from GETPROPERTY(4387) in module: h_controlmisc.prg
Called from (b)PROVDB_3HMG(2458) in module: form_calc1.prg
Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg
Called from EVENTS(1828) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg
Called from MSGEDIT(245) in module: Util_MsgEdit.prg
Called from REPORTTXTNOTEPAD(49) in module: ReportTxt.prg
Called from REPORTTXTONE(19) in module: ReportTxt.prg
Called from (b)PROVDB_2HMG(1422) in module: form_calc1.prg
Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg
Called from EVENTS(1828) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg
Called from SHOW_CALC2(238) in module: form_calc.prg

Что не так делаю ?
Наверное нужно закрывать эти 3 открытые формы ?
А как их закрыть, если не знаю эти названия форм ?
Или эти окна могут оставаться на экране, даже если закрыта форма Form_Calc ?

P.S. Эти 3 формы вызываю по кнопке, типа:
      bAction := { || SetProperty(ThisWindow.Name, This.Name, "Enabled", .F.),; 
ReportTxtOne( cFileError, .T. ) ,;
SetProperty(ThisWindow.Name, This.Name, "Enabled", .T.) }


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




Пост N: 2636
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.07.19 08:29. Заголовок: Andrey Покрути прим..


Andrey
Покрути пример с окнами https://TransFiles.ru/vo4dq

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




Пост N: 2637
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.07.19 08:57. Заголовок: PS Кнопка "Refre..


PS
Кнопка "Refresh" - это инф. об окне и его реальный тип

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




Пост N: 2638
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.07.19 10:30. Заголовок: Andrey пишет b..


Andrey пишет
 цитата:
bAction := { || SetProperty(ThisWindow.Name, This.Name, "Enabled", .F.),;
ReportTxtOne( cFileError, .T. ) ,;
SetProperty(ThisWindow.Name, This.Name, "Enabled", .T.) }



Выделенная строка может приводить к ошибке, если в ReportTxtOne будут окна, среда This может быть другая.
Уже говорили на эту тему. Надо сохранять среду. К примеру _ThisInfo() из примера или
 
bAction := { |cw,cn| cw := ThisWindow.Name, cn := This.Name, ;
SetProperty(cw, cn, "Enabled", .F.),;
ReportTxtOne( cFileError, .T. ) ,;
SetProperty(cw, cn, "Enabled", .T.) }


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




Пост N: 6332
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.07.19 11:03. Заголовок: SergKis пишет: Выде..


SergKis пишет:

 цитата:
Выделенная строка может приводить к ошибке, если в ReportTxtOne будут окна, среда This может быть другая.


Скорее всего не будет, там простое окно.
Наверное как то туда нужно засунуть проверку на
If _IsWindowActive( cw ) 
SetProperty(cw, cn, "Enabled", .T.)
Endif

Как это в блок кода написать ?
Так как форма закрывается, а по кнопке у всех 3 окон остается действие - SetProperty(cw, cn, "Enabled", .T.)
Может я и не прав...

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




Пост N: 2639
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.07.19 13:44. Заголовок: Andrey пишетСкорее в..


Andrey пишет
 цитата:
Скорее всего не будет, там простое окно.


Если с простого окна переключить focus на окно standart выполнить кнопку (блок кода) на нем, вернуться фокусом не простое, то что в This - надо посмотреть.

 цитата:
Так как форма закрывается, а по кнопке у всех 3 окон остается действие - SetProperty(cw, cn, "Enabled", .T.)


В каждом блоке будут свои local переменные cw, cn со своими значениями.

 цитата:
Как это в блок кода написать ?


iif( _IsWindowActive(cw), Setproperty(...), Nil )

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




Пост N: 6333
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.07.19 01:18. Заголовок: Спасибо БОЛЬШОЕ за п..


Спасибо БОЛЬШОЕ за помощь !
Вот так теперь не вылетает:
      bAction := {|cw,cn| cw := ThisWindow.Name, cn := This.Name  ,;  
SetProperty(cw,cn, "Enabled", .F.) ,;
ReportTxtOne( cFileError, .T. ) ,;
iif( _IsWindowActive(cw), Setproperty(cw,cn, "Enabled", .T.), Nil ) }

Т.е. после закрытия окна Form_Calc все доп. окна WINDOWTYPE STANDARD остаются на экране.
Чего и добивался, значит проверка помогла.

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




Пост N: 6350
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.19 08:05. Заголовок: Всем привет ! Увидел..


Всем привет !
Увидел новую команду:
SET DIALOGBOX CENTER OF PARENT
Для чего она ?
Просветите пожалуйста.

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




Пост N: 1526
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.07.19 09:12. Заголовок: Andrey пишет: Для ч..


Andrey пишет:

 цитата:
Для чего она ?



 цитата:

- New: SET DIALOGBOX POSITION: Sets the position of the dialog boxes
(GetColor, GetFile, GetFolder, GetFont, MessageBoxTimeout, MsgXXX,
PutFile, SELECT PRINTER
, etc.)
Added the following commands:
- SET DIALOGBOX [ POSITION ] ROW <nRow>|<@VarCodeBlockRow>|<NIL> ;
COL <nCol>|<@VarCodeBlockCol>|<NIL>
- SET DIALOGBOX [ POSITION ] CENTER OF PARENT
- SET DIALOGBOX [ POSITION ] CENTER OF <hWnd>
- SET DIALOGBOX [ POSITION ] CENTER OF DESKTOP
- SET DIALOGBOX [ POSITION ] DISABLE



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




Пост N: 2690
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.07.19 00:35. Заголовок: gfilatov2002 Приме..


gfilatov2002

Пример Tsb_ReportAge с карточкой https://TransFiles.ru/of7u3

Проявилась проблемка, если активировать карточку (press Enter),
то без изменения данных в GetBox - все ok. Фокус стоит на <Down> и нажатие
Enter или Space перемещают курсор в тсб, фокус на той же кнопке.
Если измнить что то в GetBox, сделать <Save>, данные сохранятся, фокус встает
на кнопку <Down> и нажатие Enter или Space перемещают курсор в тсб, но фокус
улетает куда то. Нажатие мышкой на эту же кнопку ситуацию не меняет.
Тсб перемешает курсор, фокус с кнопки улетает.
На кл. F3 повешена попытка узнать где фокус ?
GetFocus() в лог выдает 0, т.е. в фокусе нет контрола hmg.
Следующие команды кл. F3 фокус на кнопку восстанавливают
 
ON KEY F3 ACTION ( _LogFile(.T., 'GetFocus =', GetFocus()), ;
SetFocus(ThisWindow.Handle), ;
SetFocus(This.Btn_01.Handle) )

Использование вместо BUTTONEX обычных BUTTON, ситуацию не меняют.
STATIC FUNC AgeCard( oWnd, oBrw, oCnl )
LOCAL nRet
LOCAL bInit := {|| bAgeCard(oWnd, oBrw, oCnl) }
LOCAL aClr := NIL // { GRAY , GRAY, GREEN, RED }

...

В этом заковыка, может, кто сталкивался и есть решение.

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




Пост N: 1534
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.07.19 19:17. Заголовок: SergKis пишет: може..


SergKis пишет:

 цитата:
может, кто сталкивался и есть решение


Да, есть такая проблема с фокусировкой при взаимодействии TBrowse и GetBox
Но готового решения у меня нет
Хотя вроде все работает, если нажимать на кнопки мышкой, а не использовать клавиатуру...

SergKis пишет:

 цитата:
Пример Tsb_ReportAge с карточкой


Пример очень понравился
Планируете ли продолжать работу над ним (сохранение изменений также в DBF-файл, а не только в массив)?

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




Пост N: 2691
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.07.19 19:42. Заголовок: gfilatov2002 пишет Х..


gfilatov2002 пишет
 цитата:
Хотя вроде все работает, если нажимать на кнопки мышкой, а не использовать клавиатуру...


Так клиенты хотят клавой рулить, а тут визуально окно в фокусе, а TAB, Shift+TAB отключены и пока манипуляциями разными не удалось получить нажатие F3 автоматом для установки фокуса.
 цитата:

Планируете ли продолжать работу над ним (сохранение изменений также в DBF-файл, а не только в массив)?


Да, уже подключил в массив RecNo, потихоньку двигаю вперед

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




Пост N: 1535
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.07.19 19:47. Заголовок: SergKis пишет: Да, ..


SergKis пишет:

 цитата:
Да, уже подключил в массив RecNo


Отлично

Да, у меня после небольших изменений карточка выглядит так



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




Пост N: 2692
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.07.19 22:05. Заголовок: gfilatov2002 Сохране..


gfilatov2002
Сохранение изменений в DBF-файл сделал, но без Ваших изменений.
Тут https://TransFiles.ru/qj664

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




Пост N: 1536
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.07.19 22:46. Заголовок: SergKis пишет: Сохр..


SergKis пишет:

 цитата:
Сохранение изменений в DBF-файл сделал


Спасибо

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




Пост N: 6369
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.07.19 22:50. Заголовок: Всем привет ! У меня..


Всем привет !
У меня в тестовом примере стоит:
SET DIALOGBOX CENTER OF PARENT

Вывожу HMG_Alert() - а он по центру экрана.
Разве он не должен быть по центру приложения ?

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




Пост N: 1537
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.07.19 11:40. Заголовок: Andrey пишет: SET D..


Andrey пишет:

 цитата:
SET DIALOGBOX CENTER OF PARENT

Вывожу HMG_Alert() - а он по центру экрана.


Эта команда предназначена для функции MsgInfo() и т.п.

Для функции HMG_Alert() используй другую команду:

 цитата:
SET CENTERWINDOW RELATIVE PARENT



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




Пост N: 2693
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.07.19 12:11. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправьте пример, будут клавиши управления на карточке повторять кнопки
 
STATIC FUNC AgeCard( oWnd, oBrw, oCnl )
...
LOCAL aButt := {"&Down","&Up" ,"&Save"," &Cancel "}
...
STATIC FUNC bAgeCard( oWnd, oBrw, oCnl )
...
ON KEY ESCAPE ACTION Age_CardSave( oBrw, .F. )

ON KEY CONTROL+D ACTION iif( This.Btn_01.Enabled, Age_CardSkip( oBrw, .T. ), )
ON KEY CONTROL+U ACTION iif( This.Btn_02.Enabled, Age_CardSkip( oBrw, .F. ), )
ON KEY CONTROL+S ACTION iif( This.Btn_03.Enabled, Age_CardSave( oBrw, .T. ), )
ON KEY CONTROL+C ACTION Age_CardSave( oBrw, .F. )

RETURN NIL
...
STATIC FUNC Age_CardSkip( oBrw, lDown )
...
This.Btn_03.Enabled := .F.
ThisWindow.Cargo := .F.
ThisWindow.Closable := .T.

...


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




Пост N: 1538
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.07.19 13:04. Заголовок: SergKis пишет: буд..


SergKis пишет:

 цитата:
будут клавиши управления на карточке повторять кнопки


Добавил эти изменения в пример
Благодарю за помощь

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




Пост N: 6378
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.08.19 17:04. Заголовок: Всем привет ! Можно ..


Всем привет !
Можно ли сделать, когда программа сваливается по ошибке, выполнить еще доп.действие ?
Просто при расчётах вывожу нужные мне данные в лог-файл, хотелось бы чтобы
после вылета программы этот лог-файл поднялся по команде
   ShellExecute(, "open", "notepad.exe", M->SetTemp + MyLog,, 1 )

Как это сделать ?

На моём компе база считается без ошибок, а у юзера одного вылетает.
Одна база у меня и у юзера, а поведение разное.

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




Пост N: 6380
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.08.19 18:51. Заголовок: Andrey пишет: Как э..


Andrey пишет:

 цитата:
Как это сделать ?


Придумал.
Нужно запустить маленькую внешнюю программу через c 2 кнопками "Просмотр журнала" и "Выход"
ShellExecute(, "open", "MyLogView.exe", M->SetTemp + MyLog,, 1 )
Запомнить его хендл.
Если расчёт прошёл без ошибок, то убить эту прогу через хендл.
Если нет, то можно смотреть лог-ошибки при расчётах.

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




Пост N: 2715
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.19 19:48. Заголовок: Andrey пишет Нужно з..


Andrey пишет
 цитата:
Нужно запустить маленькую внешнюю программу


BEGIN SEQUENCE WITH {|o| break(o)}
RECOVER
END SEQUENCE

Маловато будет ?

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