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




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


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

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


Пример: \MiniGUI\SAMPLES\Advanced\DisplayMode - не работает под ХР и далее....


Пример: \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-файла ?
Есть ли функция считывания цвета фона пикселя по выбранным координатам ?

Вот код:
@ nRow, 0 LABEL Label_Full VALUE '' WIDTH nWidth HEIGHT 50 BACKCOLOR {240,240,240 } // фон под avi-файл
@ nRow, nCol ANIMATEBOX Avi_1 WIDTH 40 HEIGHT 40 File cResAvi AUTOPLAY TRANSPARENT NOBORDER

Под Windows 8 показ нормальный:


Под 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-файла ? Нужно для показа avi на различных ОС.
Если ручками ставить, то цвет можно подобрать, но на разных ОС цвета будут выглядеть по разному.

Вот для ХР цвет фона для одного avi-файла подобрал, выглядит красиво, зато на 8-ке ерунда получается:


Сам тест здесь - 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 пишет:

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


Спасибо БОЛЬШОЕ !
Нашёл цвета в i_winuser.ch
После пробы нашёл нужный цвет:
COLOR_MENU	4	{192, 192, 192}	 
COLOR_BTNFACE 15 {192, 192, 192}
COLOR_3DLIGHT 22 {192, 192, 192}


Сделал в исходнике так:
         @ nRow, 0 LABEL Label_Full VALUE '' WIDTH nWidth HEIGHT 50  
@ nRow+5, nCol ANIMATEBOX Avi_1 WIDTH 40 HEIGHT 40 File cResAvi AUTOPLAY TRANSPARENT NOBORDER
aBackColorAvi := nRGB2Arr( GetSysColor( 4 ) ) // COLOR_MENU из i_winuser.ch
Form_1.Label_Full.BackColor := aBackColorAvi // исправим фон как системный цвет


Теперь картинки выглядят правильно:


Спасибо: 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 час. Хитов сегодня: 489
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет