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




Пост 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 
ПрофильЦитата Ответить
Ответов - 199 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]


moderator


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


SergKis пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
moderator


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


gfilatov2002 пишет:

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



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





Спасибо: 0 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
постоянный участник




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


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

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


Спасибо: 0 
ПрофильЦитата Ответить



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


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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить



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


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


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


Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


SergKis пишет:

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


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

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник


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


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

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



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

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

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




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


Vlad04 пишет:

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


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

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




Пост 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 
ПрофильЦитата Ответить
администратор




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


Andrey пишет:

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


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



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




Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
постоянный участник




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


gfilatov2002 пишет:

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


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

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


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


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

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


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

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




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


Vlad04 пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator




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


Dima пишет:

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


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

 цитата:
Set Default Icon To


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


gfilatov2002
Спасибо !

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




Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


SergKis пишет:

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


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

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




Пост 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 
ПрофильЦитата Ответить
moderator




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


Andrey пишет:

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



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

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

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить



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


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


Поищи в SAMPLES GetPixel

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




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


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

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

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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Andrey пишет:

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


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


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




Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


Петр пишет:

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


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

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




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


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


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

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




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


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

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить





Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить
администратор




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


Andrey пишет:

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


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

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




Пост 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 
ПрофильЦитата Ответить
администратор




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


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

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




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


Dima пишет:

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


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

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




Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить



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


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


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

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




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


SergKis пишет:

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



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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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


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




Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить



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


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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


Со времен Summer 87

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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 
ПрофильЦитата Ответить



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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
Администратор




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


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

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




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


Pasha пишет:

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


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


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


SergKis пишет:

 цитата:

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



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

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




Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
постоянный участник




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


gfilatov2002 пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator




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


Andrey пишет:

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


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

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

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


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




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


gfilatov2002 пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator




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


Andrey пишет:

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


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

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




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


gfilatov2002 пишет:

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



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

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник


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


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

 цитата:
Declare window Win_2


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

 цитата:

cFormName:='Win_2'



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




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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить



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


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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


SergKis пишет:

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




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

Спасибо: 0 
ПрофильЦитата Ответить



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


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

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




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


rvu пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить



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


Andrey пишет:

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




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

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

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




Пост 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 
ПрофильЦитата Ответить
moderator


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


Andrey пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


Haz пишет:

 цитата:
LangIndicator


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


Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Dima пишет:

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


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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


Haz

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




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


Haz пишет:

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



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


Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Andrey пишет:

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


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



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




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


Haz пишет:

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



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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


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


Andrey пишет:

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


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

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


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



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


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

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




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


Vlad04 пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить





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


Vlad04 пишет:

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



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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
администратор




Пост 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 
ПрофильЦитата Ответить



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


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


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

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


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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


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

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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить



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


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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


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

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

Спасибо: 0 
ПрофильЦитата Ответить



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


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


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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 
ПрофильЦитата Ответить
администратор




Пост 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 
ПрофильЦитата Ответить
администратор




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


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

Спасибо: 0 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
администратор




Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
администратор




Пост 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 
ПрофильЦитата Ответить
администратор




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


Dima пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


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


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


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


Andrey пишет:

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


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

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




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


PSP пишет:

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



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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




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


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

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


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




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


Pasha пишет:

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



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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




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


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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




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


Andrey пишет:

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



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

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




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


Pasha пишет:

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



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

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




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


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

Pasha пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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 
ПрофильЦитата Ответить
постоянный участник


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


Я использую

 цитата:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




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


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

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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




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


Pasha пишет:

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



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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
постоянный участник




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


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

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



Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


Andrey пишет:

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


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

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

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




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


Dima пишет:

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


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

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




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


Всем привет !

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

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

Спасибо: 0 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
постоянный участник




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


gfilatov2002 пишет:

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


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

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



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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


Andrey пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить
постоянный участник


Пост 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 
ПрофильЦитата Ответить
администратор




Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


Dima пишет:

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


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

Dima пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


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

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




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


Dima пишет:

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


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

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




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


Andrey пишет:

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



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


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



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




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


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

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

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

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


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




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


Всем привет !

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

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


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




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


gfilatov2002 пишет:

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



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

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

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


Haz пишет:

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


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

Haz пишет:

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


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

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




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


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

Спасибо: 0 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
постоянный участник




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


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

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

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




Пост 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 
ПрофильЦитата Ответить
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 
ПрофильЦитата Ответить
постоянный участник




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


Спасибо !!!

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




Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


SergKis СПАСИБО !

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




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


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


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

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

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




Пост 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 
ПрофильЦитата Ответить
администратор




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


Andrey пишет:

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


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
постоянный участник




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


SergKis пишет:

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


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

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




Пост 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 
ПрофильЦитата Ответить
moderator


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


Andrey пишет:

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


Дима так и называл тему Findwindowex, там простой пример перебора.
И ты в этой теме отметился. Пора заводить блокнотик, память слишком часто подводит.

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




Пост N: 6046
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 20:55. Заголовок: Haz пишет: Дима так..


Haz пишет:

 цитата:
Дима так и называл тему Findwindowex, там простой пример перебора.


Спасибо Haz !
Только там нет перебора, т.е. как продолжить поиск далее ?

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




Пост N: 6047
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 21:22. Заголовок: Нашёл как сделать пе..


Нашёл как сделать перебор всех окон в памяти:
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6048
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 21:26. Заголовок: Haz пишет: Что меша..


Haz пишет:

 цитата:
Что мешает запомнить найденный хендл и продолжить поиск следующего и так далее


Не могу понять как продолжить поиск дальше... Т.е. до какого цикла перебирать всё это.
А вдруг окажется 3-5 программ одинаковых одновременно в памяти ?
Вот мне нужно и подсчитать сколько программ в памяти - допустим "TEST123"

P.S. Есть ли короче решение, чем работающее - Пост N: 6047 ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1313
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.09.18 21:44. Заголовок: Andrey пишет: GetWi..


Andrey пишет:

 цитата:
GetWindow


Да это я тупанул.) много работать вредно.
Ты сам спросил, сам нашёл
Я тут уроки с ребёнком делаю, математика 6 класс, вот где (_! _)

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




Пост N: 6049
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 21:45. Заголовок: Вот так сделал подсч..


Вот так сделал подсчёт и реализовал смену цвета в Tsbrowse:


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




Пост N: 6050
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 21:47. Заголовок: Haz пишет: Ты сам с..


Haz пишет:

 цитата:
Ты сам спросил, сам нашёл


Не всегда бывает, что сам нахожу...
Спасибо за помощь !

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1314
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.09.18 22:01. Заголовок: Andrey пишет: сдела..


Andrey пишет:

 цитата:
сделал подсчёт


Через индекс?
Ordkeyno()?
В общем случае правильно, при активном фильтре опять шляпа получится

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




Пост N: 6051
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.18 22:43. Заголовок: Haz пишет: Через ин..


Haz пишет:

 цитата:
Через индекс?
Ordkeyno()?
В общем случае правильно, при активном фильтре опять шляпа получится



Это обучающий пример для тех кто переходит на CDX и МиниГуи + работа в сети.
Я сейчас товарищу помогаю с терминалки перейти, вот чтобы на пальцах не объяснять, сделал пример.
Я сам не знал что удаление записи имеет такой короткий код.
В примере Tsb_config для удаления куча кода используется.
А этот пример и не особо много кода занимает...

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить



Пост 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 
ПрофильЦитата Ответить
администратор




Пост N: 6926
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.09.18 16:44. Заголовок: SergKis пишет: Даже..


SergKis пишет:

 цитата:
Даже не знаю, что сказать ....


К первоклашкам надоть ему

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1319
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.09.18 17:15. Заголовок: Сергей Даже не знаю..


Сергей

 цитата:
Даже не знаю, что сказать ....



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




Пост N: 6056
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.09.18 14:20. Заголовок: Всем привет ! Есть л..


Всем привет !
Есть ли стандартный объект типа MsgInfo только с прокруткой текста, который выводишь ?
Или самому придётся делать такое окно ?
А то у меня в MsgInfo не помещается весь текст и кнопки не видно.
Вот так на экране обрезает:

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




Пост 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 
ПрофильЦитата Ответить
moderator


Пост 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 
ПрофильЦитата Ответить
moderator


Пост N: 1381
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.10.18 17:50. Заголовок: В общем повторюсь о ..


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2111
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.10.18 18:04. Заголовок: Haz пишет Подготовил..


Haz пишет
 цитата:
Подготовил данные, дай их бровсу через сетаррай и все.


Еще проще, до окна запусти прелодер, формируй в это время массив
по завершении создавай окно с тсб и в on init убирай прелодер и работай.
Ты все проделываешь, наверно, в on init ?

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




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


SergKis пишет:

 цитата:
Еще проще, до окна запусти прелодер, формируй в это время массив
по завершении создавай окно с тсб и в on init убирай прелодер и работай.


Да я так и сделал ! Скорость возрасла, несмотря на большые данные.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2112
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.10.18 18:08. Заголовок: Andrey пишет Вот код..


Andrey пишет
 цитата:
Вот код из примера


То пример, а у тебя программа - это может быть большая разница

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6092
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.10.18 18:10. Заголовок: SergKis пишет: То п..


SergKis пишет:

 цитата:
То пример, а у тебя программа - это может быть большая разница


Прелодер - один в один как и SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2113
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.10.18 18:24. Заголовок: Andrey Я без потоко..


Andrey
Я без потоков делаю, если это в пределах до 60 сек. обхожусь сообщением (+может быть счетчик в StatusBar)
Если использую окно с progressbar, так в таком виде вызов Do_WaitWindow( {|o| Otbor(o) } )
сама ф-я такая Скрытый текст

как то хватает.
В твоем случае нет прорисовки

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




Пост N: 6093
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.10.18 18:34. Заголовок: SergKis пишет: В тв..


SergKis пишет:

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


А почему ? Простой же код.
Не смертельно, но просто некрасиво.
В цикле с базой работает, а на тяжёлых операциях нет прорисовки и всё тут.
Делал даже так:
   // создаём окно ожидания с потоком 
WaitThreadCreate( 'Расчёт по отчёту ...' )
InkeyGui(100)
DO EVENTS

Всё равно нет прорисовки иногда.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1382
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.10.18 18:07. Заголовок: Не видно всего кода,..


Не видно всего кода, но такое ощущение что do events лишь бы впихнуть куда. Зачем он после запуска потока,? здесь самое нагруженное место в коде? А в цикле формирования массива данных он есть? Кажется что нет.
Могу ошибаться не видя код. Но что то мне подсказывает что не ошибаюсь

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


Пост N: 1483
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 28.10.18 19:23. Заголовок: Haz пишет: такое ощ..


Haz пишет:

 цитата:
такое ощущение что do events лишь бы впихнуть куда


У меня тоже. Андрей, DO EVENTS нужно ставить в "долгих циклах", чтобы приложение "не зависало".

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




Пост N: 6094
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.10.18 01:05. Заголовок: Haz пишет: Могу оши..


Haz пишет:

 цитата:
Могу ошибаться не видя код. Но что то мне подсказывает что не ошибаюсь


Буду тогда пробовать написать отдельный тест.

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




Пост 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 
ПрофильЦитата Ответить
Администратор




Пост N: 3811
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.11.18 14:57. Заголовок: Как я понял, вывод н..


Как я понял, вывод на stdout компилятора и линкера переадресовывается в error.log, и есть проблема его прочесть ?
Так линкер не переделать, чтобы он в нужной кодовой странице выдавал свой лог. Разве что писать в спортлото Эмбаркадеро Текнолоджиз Инк.
Есть проблема прочесть текстовый файл в желаемой кодировке ? Так это умеет делать например всем известный фар.

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




Пост N: 6118
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.11.18 15:25. Заголовок: Pasha пишет: Как я ..


Pasha пишет:

 цитата:
Как я понял, вывод на stdout компилятора и линкера переадресовывается в error.log, и есть проблема его прочесть ?


Да. До этого были вообще кракозябы и сердечки.
Поставил в hbmk2.bat второй строкой chcp 65001, сердечки пропадают, но пути все равно нет.
Наверное это BCC линковщик выдаёт такую кракозябу.
Тем более он такой древний...
MS VC2017 берет кодировку заданной в файле сборки и по русски пишет правильно.
Понял, что никак.
Спасибо !
Но хоть от сердечек избавился....

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




Пост 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 
ПрофильЦитата Ответить
Ответов - 199 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 600
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет