On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение



Пост N: 8
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 12.09.07 07:26. Заголовок: Проблемы и ограничения обработки события OnSize для объекта Image


Проблема всплыла в очередной раз когда делал обработку изменения размеров окна так, чтобы объект Image с открытой картинкой также менял свой размер.
Делается это так.
Сначала меняется размер фрейма внутри которого показывается картинка.
Потом вычисляются новые границы для объекта Image.
Затем удаляется существующий объект Image
и создается новый с новыми границами.
Вроде такой способ показан в одном из примеров.
//----------------------------
static function wReSize()
local s
if wMain.Width<400; wMain.Width:=400; endif
if wMain.Height<657; wMain.Height:=657; endif
wMain.Frame_13.Height:=wMain.Height-wMain.Frame_13.Row-BottomBorder
wMain.Frame_13.Width:=wMain.Width-wMain.Frame_13.Col-RightBorder

GetImgZoneSize()
IF IsControlDefined( Image_1, wMain)
s:=wMain.Image_1.Picture
wMain.Image_1.Release
//ShowPicture(s)
ENDIF
return Nil
//----------------------------
function GetImgZoneSize()
imgCol:=wMain.Frame_13.Col+10
imgWidth:=wMain.Frame_13.Width-20
imgRow:=wMain.Frame_13.Row+20
imgHeight:=wMain.Frame_13.Height-30
return Nil
//----------------------------
function ShowPicture(cFile)
@ imgRow,imgCol IMAGE Image_1 OF wMain ;
PICTURE cFile ;
WIDTH imgWidth ;
HEIGHT imgHeight
return Nil
//----------------------------
Однако, как выяснилось, вызов обработчика события OnSize - функции wReSize() - происходит через каждый пиксел изменения размера окна. И здесь происходит какая-то шиза – картинка не видна на экране.
Закрыл вызов показа (см.текст), оставил только удаление объекта Image_1. Вызываю показ (создание нового объекта Image_1) отдельным нажатием и вижу, что появившаяся картинка частично перекрыта сверху прамоугольником с границами предыдущего удаленного объекта Image_1. Поэтому в предыдущем варианте – с постоянной перерисовкой вовремя ReSize – картинка была не видна , т.к. перекрывающий ее прямоугольник отличался размерами всего на один пиксел.
Причем, если окно с картинкой всплывает из-под окна другого приложения – то картинка видна полностью. А если в minimize и обратно – то частично.

Резюме.
1. Вопрос. Что это за шиза? Т.е. почему после удаления остается какой-то объект фонового цвета. И как с этим бороться?
2. Предложение. Вроде бы видел в какой-то системе типа Delphy события типа Befor_Resizing и After_Resizing. Первое событие – когда нажимается кнопка мыши на границе окна и производится вход в режим ReSize. Второе событие – когда отпускается кнопка мыши после ReSize. Удобно было бы иметь их в некоторых случаях. Чтобы не производить масштабных вычислений на каждый пиксел изменения размеров, а запомнить что нужно перед ReSize и пересчитать что нужно один раз после ReSize.
3. Замечание. В очередной раз столкнулся с отставанием в документации. Читаю про объект Image - An image static control can display bitmaps, icons (including animated icons), or enhanced metafiles. Начинаю искать способ показать JPG. А в примерах без всяких изысков в Image загружают и JPG, и GIF, и CUR

SadStar

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 25 , стр: 1 2 All [только новые]


модератор




Пост N: 546
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 12.09.07 10:18. Заголовок: Re:


SADSTAR2 пишет:

 цитата:
почему после удаления остается какой-то объект фонового цвета. И как с этим бороться?


Думаю, так работает Win-обработчик события Paint (подробности см. здесь). Попробуй использовать для обновления картинки метод Refresh, который поддерживается в последней версии библиотеки.
function ShowPicture(cFile)
@ imgRow,imgCol IMAGE Image_1 OF wMain ;
PICTURE cFile ;
WIDTH imgWidth ;
HEIGHT imgHeight
//
wMain.Image_1.Refresh
//
return Nil

Замечание по теме. Поскольку изменение размеров картинки в примере требуется только для перерисовки фона окна, рекомендую обратить внимание на команду DEFINE BKGBRUSH, которая лучше справляется с этой задачей

SADSTAR2 пишет:

 цитата:
столкнулся с отставанием в документации


Есть такое дело Спасибо за подсказку

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


Пост N: 226
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.07 10:58. Заголовок: Re:


SADSTAR2 пишет:

 цитата:
2. Предложение. Вроде бы видел в какой-то системе типа Delphy события типа Befor_Resizing и After_Resizing. Первое событие – когда нажимается кнопка мыши на границе окна и производится вход в режим ReSize. Второе событие – когда отпускается кнопка мыши после ReSize. Удобно было бы иметь их в некоторых случаях. Чтобы не производить масштабных вычислений на каждый пиксел изменения размеров, а запомнить что нужно перед ReSize и пересчитать что нужно один раз после ReSize.



Весь инструментарий для реализации Вашего предложения в MiniGUI Ex есть - SET EVENTS FUNCTION ..
Только Вы им почему-то не пользуетесь.

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


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


Пост N: 227
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.07 17:52. Заголовок: Re:


Крайне рекомендую сделать бэкап

Открываем \MiniGUI\Include\i_var.ch
вносим сл.изменения

перед
#xtranslate _HMG_ErrorLogFile => _HMG_SYSDATA\[1\]
добавляем
#define _HMG_SYSDATA_SIZE 412

после
#xtranslate _HMG_ActiveControlTrailingFontColor => _HMG_SYSDATA\[410\]
добавляем
#xtranslate _HMG_aFormEnterSizeMoveProcedure => _HMG_SYSDATA\[411\]
#xtranslate _HMG_aFormExitSizeMoveProcedure => _HMG_SYSDATA\[412\]

Сохраняем изменения, закрываем файл.

Открываем \MiniGUI\Source\h_init.prg
вносим сл.изменения

Меняем
Public _HMG_SYSDATA [ 410 ]
на
Public _HMG_SYSDATA [ _HMG_SYSDATA_SIZE ]

после
_HMG_aControlMiscData1 := {}
добавляем
_HMG_aFormEnterSizeMoveProcedure := {}
_HMG_aFormExitSizeMoveProcedure := {}

Небольшое лирическое отступление. Посмотрев чуть ниже, мы увидим
if ! IsInsertActive()
If( IsWinNT(), KeyToggleNT( VK_INSERT ), KeyToggle( VK_INSERT ) )
EndIf

А вот, что пишут некоторые пользователи:
When starting any EXE from SAMPLES directory built with COMPILE.BAT
(with no additional parameters), my EXE starts in the background,
sending the INS key to the file manager it was started from (both
Total Commander and FAR).

Is it common problem? How to start HMG application in the foreground ?

Улыбаемся, сохраняем изменения, закрываем файл.

Открываем \MiniGUI\Source\h_windows.prg
Здесь находится серце MiniGUI - функция Events, IMHO эта функция заслужила свой отдельный файл, h_events.prg, например.

Будем добавлять обработку событий WM_ENTERSIZEMOVE и WM_EXITSIZEMOVE
Где-то возле обработчика WM_MOVE и по аналогии с ним добавляем


***********************************************************************
case WM_ENTERSIZEMOVE
***********************************************************************

_ActiveMenu := .F.
_HMG_MouseRow := HIWORD(lParam)
_HMG_MouseCol := LOWORD(lParam)

i := Ascan ( _HMG_aFormhandles , hWnd )

if i > 0
_DoWindowEventProcedure ( _HMG_aFormEnterSizeMoveProcedure , i )
EndIf
exit

***********************************************************************
case WM_EXITSIZEMOVE
***********************************************************************

_ActiveMenu := .F.
_HMG_MouseRow := HIWORD(lParam)
_HMG_MouseCol := LOWORD(lParam)

i := Ascan ( _HMG_aFormhandles , hWnd )

if i > 0
_DoWindowEventProcedure ( _HMG_aFormExitSizeMoveProcedure , i )
EndIf
exit


Дальше в обработчике WM_DESTROY
после
_HMG_aFormMoveProcedure := ""
добавляем
_HMG_aFormEnterSizeMoveProcedure := ""
_HMG_aFormExitSizeMoveProcedure := ""

Function _DefineWindow
Вместо
Function _DefineWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, nosize, nosysmenu, nocaption, StatusBar, StatusText, InitProcedure, ReleaseProcedure, MouseDragProcedure, SizeProcedure, ClickProcedure, MouseMoveProcedure, aRGB, PaintProcedure, noshow, topmost, main, icon, child, fontname, fontsize, NotifyIconName, NotifyIconTooltip, NotifyIconLeftClick, GotFocus, LostFocus, VirtualHeight, VirtualWidth, scrollleft, scrollright, scrollup, scrolldown, hscrollbox, vscrollbox, helpbutton, MaximizeProcedure, MinimizeProcedure, cursor, NoAutoRelease, InteractiveCloseProcedure, RestoreProcedure, MoveProcedure, mdi )
пишем
Function _DefineWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, nosize, nosysmenu, nocaption, StatusBar, StatusText, InitProcedure, ReleaseProcedure, MouseDragProcedure, SizeProcedure, ClickProcedure, MouseMoveProcedure, aRGB, PaintProcedure, noshow, topmost, main, icon, child, fontname, fontsize, NotifyIconName, NotifyIconTooltip, NotifyIconLeftClick, GotFocus, LostFocus, VirtualHeight, VirtualWidth, scrollleft, scrollright, scrollup, scrolldown, hscrollbox, vscrollbox, helpbutton, MaximizeProcedure, MinimizeProcedure, cursor, NoAutoRelease, InteractiveCloseProcedure, RestoreProcedure, MoveProcedure, mdi, EnterSizeMoveProcedure, ExitSizeMoveProcedure )

Дальше ищем что-то такое
if valtype(MoveProcedure) == "U"
MoveProcedure := ""
endif
не находим ( как. в прочем и для InteractiveCloseProcedure, RestoreProcedure и некоторых др.)
Пробуем понять в чем смысл
if valtype(PaintProcedure) == "U"
PaintProcedure := ""
endif

и после
_HMG_aFormMoveProcedure [k] := MoveProcedure
добавляем
_HMG_aFormEnterSizeMoveProcedure [k] := EnterSizeMoveProcedure
_HMG_aFormExitSizeMoveProcedure [k] := ExitSizeMoveProcedure

после
aAdd ( _HMG_aFormMoveProcedure , MoveProcedure )
добавляем
aAdd ( _HMG_aFormEnterSizeMoveProcedure , EnterSizeMoveProcedure )
aAdd ( _HMG_aFormExitSizeMoveProcedure , ExitSizeMoveProcedure )

Подобные изменения при желании вносим в _DefineModalWindow

Теперь правим i_window.ch, i_window_ext.ch :

#xcommand DEFINE WINDOW <w> ;
AT <row>,<col> ;
WIDTH <wi> ;
HEIGHT <h> ;
....
[ ON ENTERSIZEMOVE <EnterSizeMoveProcedure> ] ;
[ ON MOVE <MoveProcedure> ] ;
[ ON SIZE <SizeProcedure> ] ;

[ ON EXITSIZEMOVE <ExitSizeMoveProcedure> ] ;
....
[ <helpbutton: HELPBUTTON> ] ;
=>;
_DefineWindow ( <"w">, <title>, <col>, <row>, <wi>, <h>, <.nominimize.>, <.nomaximize.>, <.nosize.>, <.nosysmenu.>, <.nocaption.>,.F., '',<{InitProcedure}>, <{ReleaseProcedure}> , <{MouseDragProcedure}>, <{SizeProcedure}> , <{ClickProcedure}> , <{MouseMoveProcedure}>, [<backcolor>] , <{PaintProcedure}> , <.noshow.> , <.topmost.> , <.main.> , <icon> , <.child.> , <FontName> , <FontSize>, <NotifyIcon> , <NotifyIconTooltip> , <{NotifyLeftClick}> , <{GotFocusProcedure}>, <{LostFocusProcedure}> , <vHeight> , <vWidth> , <{scrollleft}> , <{scrollright}> , <{scrollup}> , <{scrolldown}> , <{hScrollBox}> , <{vScrollBox}> , <.helpbutton.> , <{MaximizeProcedure}> , <{MinimizeProcedure}> , <cursor> , <.noautorelease.> , <{interactivecloseprocedure}> , <{RestoreProcedure}> , <{MoveProcedure}> , <.mdi.>, <{EnterSizeMoveProcedure}>, <{ExitSizeMoveProcedure}> ) ;;
DECLARE WINDOW <w>


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


Пост N: 228
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.07 17:54. Заголовок: Re:


Пишем маленькую демку и убеждаемся что все более-менее сносно работает.

#include "minigui.ch"

DECLARE WINDOW test

function main()
PUBLIC aBeginPos := { 0, 0, 0, 0 }
PUBLIC aEndPos := { 0, 0, 0, 0 }

DEFINE WINDOW test AT 164 , 292 WIDTH 502 HEIGHT 382 TITLE "test" MAIN;
ON ENTERSIZEMOVE OnEnterSizeMove();
ON EXITSIZEMOVE OnExitSizeMove();

END WINDOW
Activate Window Test

return

function OnEnterSizeMove()
aBeginPos[1] := test.row
aBeginPos[2] := test.col
aBeginPos[3] := test.height
aBeginPos[4] := test.width
test.title := str(test.col) + str(test.row) + str(test.height) + str(test.width)
return nil

function OnExitSizeMove()
aEndPos[1] := test.row
aEndPos[2] := test.col
aEndPos[3] := test.height
aEndPos[4] := test.width
test.title := str(test.col) + str(test.row) + str(test.height) + str(test.width)
return nil


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


Пост N: 229
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.07 18:06. Заголовок: Re:


Рекомендую также по этому шаблону сделать доступной обработку сообщений WM_MOVING, WM_SIZING, возможно чуть-чуть изменить обработку WM_MOVE, WM_SIZE. Это сделает доступным docking, позволит для окна ввести предложения MINHEIGHT, MAXHEIGHT, MINWIDTH, MAXWIDTH и вплотную приблизит к решению autosize control. Останется строк 40-50 кода написать

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




Пост N: 547
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 12.09.07 18:49. Заголовок: Re:


Петр пишет:

 цитата:
Останется строк 40-50 кода написать


Большое спасибо за идею!
Вижу, что работа над Personal Edition продвигается неплохо


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


Пост N: 230
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.07 19:30. Заголовок: Re:


gfilatov пишет:

 цитата:
Большое спасибо за идею!


Спасибо.

gfilatov пишет:

 цитата:
Вижу, что работа над Personal Edition продвигается неплохо


Работаем. И я надеюсь, что все, или почти все, хорошие решения и идеи, которые не выходят рамки концепции MiniGUI - рано или поздно попадут в MiniGUI Ex.

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




Пост N: 548
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 12.09.07 20:54. Заголовок: Re:


Петр пишет:

 цитата:
хорошие решения и идеи, которые не выходят за рамки концепции MiniGUI - рано или поздно попадут в MiniGUI Ex.


Без сомнений
На том стоим!

P.S.
Петр! Большая просьба, если есть готовые к опубликованию примеры - присылайте (замучился ожидать...)

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



Пост N: 9
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 13.09.07 04:59. Заголовок: Правильно ли я понял


Правильно ли я понял, что мне самому не надо модернизировать систему т.к. метр GFilatov заинтересовался этой идеей и она будет реализована в следующей версии?
Иначе получится разветвление версий, а поддерживать свою ветку я не смогу.

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




Пост N: 549
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 13.09.07 10:00. Заголовок: Re:


SADSTAR2 пишет:

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


Если я получу еще хотя бы один голос за необходимость такой модернизации, то она будет выполнена

Пока же я еще раз рекомендую обратить внимание на более простое решение Вашей проблемы с помощью команды

DEFINE BKGBRUSH newBrush PATTERN IN Form_Main BITMAP smiles.bmp


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


Пост N: 231
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 13.09.07 10:41. Заголовок: Re:


gfilatov пишет:

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


На этом форуме
Похоже, что SADSTAR2у придется долго ждать .

SADSTAR2, Вам, что нужно - фон окна или картинка в фрейме? Если фон - то действительно DEFINE BKGBRUSH самое простое и эффективное решение.



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




Пост N: 550
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 13.09.07 16:17. Заголовок: Re:


Петр пишет:

 цитата:
позволит для окна ввести предложения MINHEIGHT, MAXHEIGHT, MINWIDTH, MAXWIDTH


Эти свойства окна будут доступны в следующем релизе

Ниже тестовый пример для этой фичи:

/*
* MiniGUI MinMaxSize Demo
* (c) 2007 Grigory Filatov <gfilatov@freemail.ru>
*/

#include "minigui.ch"

DECLARE WINDOW Form_1

Function Main

DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 200 ;
TITLE 'Hello World!' ;
MAIN ;
ON MAXIMIZE Form_1.Center

DEFINE BUTTON Button_1
ROW 10
COL 10
CAPTION 'OK'
ACTION MsgBox('Hello World!')
DEFAULT .T.
END BUTTON

DEFINE BUTTON Button_2
ROW 40
COL 10
CAPTION 'Cancel'
ACTION ThisWindow.Release
END BUTTON

END WINDOW

Form_1.MinWidth := 150
Form_1.MinHeight := 150
Form_1.MaxWidth := 1024
Form_1.MaxHeight := 768

CENTER WINDOW Form_1

ACTIVATE WINDOW Form_1

Return nil




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


Пост N: 233
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 13.09.07 19:46. Заголовок: Re:


gfilatov пишет:

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



Это было бы не плохо.

Но мне кажется, что
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 200 ;
MINWIDTH 150;
MAXWIDTH 1024;
MINHEIGHT 150;
MAXHEIGHT 1024;
TITLE 'Hello World!' ;
MAIN ;
ON MAXIMIZE Form_1.Center

тоже нужно предусмотреть. Это облегчит работу Формигони

А теперь о примере. Теперь в поставку входит около 300. Причем не буду говорить о их качестве.
Давайте о количестве, чтобы просто на них глянуть, затратив 1 минуту понадобится около 5 часов.
Я не думаю, что многие согласятся на такой подвиг. И вопросы задаваемые пользователями говорят, что большинство из них примеры не смотрит.

Вот лично я бы хотел хотел увидеть вместо ON_INTERACTIVECLOSE, ON_KEY, MoveWindows, ON_QWERYDATA может что-то упустил - один, ну два, хорошо написанных примера по работе с окнами.

IMHO примеров в MiniGUI уже столько, что они из "+" превращаются в "-" библиотеки.
Ну все сказанное не значит, что я примеров Вам присылать не буду .
Но, Григорий, согласитесь пора устроить небольшую уборку





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




Пост N: 552
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 13.09.07 20:47. Заголовок: Re:


Петр пишет:

 цитата:
согласитесь пора устроить небольшую уборку


Согласен
Давайте конкретные предложения, что выбросить или чем заменить
Возможно, требуется добавить еще каталоги для сегментации примеров..

Петр пишет:

 цитата:
не значит, что я примеров Вам присылать не буду


Ловлю на слове

Петр пишет:

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


Да, это правда.



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




Пост N: 553
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 13.09.07 21:58. Заголовок: Re:


Петр пишет:

 цитата:
Но мне кажется, что
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 200 ;
MINWIDTH 150;
MAXWIDTH 1024;
MINHEIGHT 150;
MAXHEIGHT 1024;
TITLE 'Hello World!' ;
MAIN ;
ON MAXIMIZE Form_1.Center

тоже нужно предусмотреть


Не хотелось бы плодить необязательные свойства в структуре окна
Тем более, что можно использовать для присвоения событие ON INIT:

DEFINE WINDOW Form_1 ;
...
ON INIT oninit() ;
...

proc oninit

This.MinWidth := 100
This.MinHeight := 150
ThisWindow.MaxWidth := 800
ThisWindow.MaxHeight := 600

return

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



Пост N: 10
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 14.09.07 01:40. Заголовок: Картинку во фрейме


Петр пишет:

 цитата:
SADSTAR2, Вам, что нужно - фон окна или картинка в фрейме? Если фон - то действительно DEFINE BKGBRUSH самое простое и эффективное решение.


Картинку в заданных границах. Фрейм - рамка для обозначения зоны показа. Кроме этого есть другие визуальные элементы = кнопки,тектбоксы, лейблы и т.п.

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



Пост N: 11
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 14.09.07 01:42. Заголовок: Картинку во фрейме


Петр пишет:

 цитата:
SADSTAR2, Вам, что нужно - фон окна или картинка в фрейме? Если фон - то действительно DEFINE BKGBRUSH самое простое и эффективное решение.


Картинку в заданных границах. Фрейм - рамка для обозначения зоны показа. Кроме этого есть другие визуальные элементы = кнопки,тектбоксы, лейблы и т.п.

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




Пост N: 554
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 14.09.07 12:29. Заголовок: Re:


Петр пишет:

 цитата:
Но мне кажется, что
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 200 ;
MINWIDTH 150;
MAXWIDTH 1024;
MINHEIGHT 150;
MAXHEIGHT 1024;
TITLE 'Hello World!' ;
MAIN ;
ON MAXIMIZE Form_1.Center

тоже нужно предусмотреть.



Согласен с Вами. Добавил эту возможность.


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


Пост N: 237
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 14.09.07 15:52. Заголовок: Re:


gfilatov пишет:

 цитата:
Добавил эту возможность.



Хорошо
Сегодня слишком занят. Завтра или послезавтра напишу Вам письмо с некоторыми предложениями и примером с TN.

SADSTAR2 Я Вам обязательно отвечу. Посмотрю как организована работа с IMAGE и что-там можно, нельзя исправить.



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




Пост N: 555
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 14.09.07 16:41. Заголовок: Re:


Петр пишет:

 цитата:
напишу Вам письмо с некоторыми предложениями и примером с TN


Увы, ничего не получил

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



Пост N: 12
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 25.09.07 05:37. Заголовок: Refresh rulez


gfilatov пишет:

 цитата:
Попробуй использовать для обновления картинки метод Refresh, который поддерживается в последней версии библиотеки.


Это помогло. Картинку видно всегда.

По документации опять нестыковку нашел вроде бы.
В (x)harbour.chm из поставки нашел функцию FileCopy
FILECOPY(<cSourceFile>, <cTargetFile>, [<lMode>]) --> nCopyByte
Скомпилировал без ошибок.
При выполнении вылетает по ошибке на этой функции, хотя файл скопировался.
Смотрю внимательно документацию.
Вижу - Library is ct3.lib
У меня такой библиотеки нет, а компилятор не ругался.
Зато есть libct.lib. Вроде это тоже Clipper Tools.
Может в ней есть эта функция, только с другими параметрами?
Конечно обошелся без использования этих функций (FileCopy,FileMove),
"Осадок остался".




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




Пост N: 563
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 25.09.07 16:26. Заголовок: Re:


SADSTAR2 пишет:

 цитата:
Зато есть libct.lib. Вроде это тоже Clipper Tools.
Может в ней есть эта функция, только с другими параметрами?



Да, есть. Ниже ее полные исходники:


/*
* Harbour Project source code:
* CT3 file functions:
* FILECOPY(), FILECOPEN(), FILECCLOSE(), FILEAPPEND()
*
* Program..: fcopy.prg
* Author...: Frederic J. Bell
* Dated....: Jun,17 94
* Revised..: Sep,20 94
* Purpose..: Replaces the following ca-tools functions which generate GPF's
* FileCopy(), FileCOpen() & FileAppend()!
* Relies on: Clipper (can you believe it!)
* Compile..: /n /m /w /[/p /b /l] /es2
* Notes....:
* No copyright - released into the public domain NSA.
*
* Copyright 2007 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
*
* added FILECDATI() and rewritten above functions for CT3 compatibility
* and some problems fixing,
*
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/


#include "fileio.ch"
#include "common.ch"
#define F_BLOCK 512

STATIC s_hSrcFile := -1
STATIC s_lSetDaTi := .T.
STATIC s_fileDate, s_fileTime

/*
* FileCopy()
* This is a replacement for the CA-tools III function of the
* same name that causes GPF's.
*/
FUNCTION FILECOPY( cSource, cDest, lMode )
LOCAL hDstFile
LOCAL cBuffer := SPACE( F_BLOCK )
LOCAL lDone := .F.
LOCAL nSrcBytes, nDstBytes, nTotBytes := 0

IF !ISLOGICAL( lMode )
lMode := .F.
ENDIF
IF s_hSrcFile != -1
FCLOSE( s_hSrcFile )
ENDIF
s_hSrcFile := FOPEN( cSource, FO_READ )
IF s_hSrcFile != -1
hDstFile := FCREATE( cDest )
IF hDstFile != -1
DO WHILE !lDone
nSrcBytes := FREAD( s_hSrcFile, @cBuffer, F_BLOCK )
IF nSrcBytes == 0
lDone := 0
EXIT
ENDIF
nDstBytes := FWRITE( hDstFile, cBuffer, nSrcBytes )
IF nDstBytes > 0
nTotBytes += nDstBytes
ENDIF
IF nDstBytes < nSrcBytes
EXIT
ENDIF
ENDDO
FCLOSE( hDstFile )
IF lDone .OR. !lMode
FCLOSE( s_hSrcFile )
s_hSrcFile := -1
ENDIF
s_fileDate := FILEDATE( cSource )
s_fileTime := FILETIME( cSource )
IF s_lSetDaTi
SETFDATI( cDest, s_fileDate, s_fileTime )
ENDIF
ELSE
FCLOSE( s_hSrcFile )
s_hSrcFile := -1
ENDIF
ENDIF
RETURN nTotBytes


FUNCTION FILECOPEN()
RETURN s_hSrcFile != -1


FUNCTION FILECDATI( lNewMode )
LOCAL lOldMode := s_lSetDaTi
IF ISLOGICAL( lNewMode )
s_lSetDaTi := lNewMode
ENDIF
RETURN lOldMode


FUNCTION FILECCONT( cDest )
LOCAL hDstFile
LOCAL cBuffer := SPACE( F_BLOCK )
LOCAL lDone := .F.
LOCAL nSrcBytes, nDstBytes, nTotBytes := 0

IF s_hSrcFile != -1
hDstFile := FCREATE( cDest )
IF hDstFile != -1
DO WHILE !lDone
nSrcBytes := FREAD( s_hSrcFile, @cBuffer, F_BLOCK )
IF nSrcBytes == 0
lDone := 0
EXIT
ENDIF
nDstBytes := FWRITE( hDstFile, cBuffer, nSrcBytes )
IF nDstBytes > 0
nTotBytes += nDstBytes
ENDIF
IF nDstBytes < nSrcBytes
EXIT
ENDIF
ENDDO
FCLOSE( hDstFile )
IF lDone
FCLOSE( s_hSrcFile )
s_hSrcFile := -1
ENDIF
IF s_lSetDaTi
SETFDATI( cDest, s_fileDate, s_fileTime )
ENDIF
ENDIF
ENDIF
RETURN nTotBytes


FUNCTION FILECCLOSE()
IF s_hSrcFile != -1
FCLOSE( s_hSrcFile )
s_hSrcFile := -1
RETURN .T.
ENDIF
RETURN .F.


FUNCTION FILEAPPEND( cSrc, cDest )
LOCAL cBuffer := Space( F_BLOCK )
LOCAL hSrcFile, hDstFile
LOCAL nSrcBytes, nDstBytes, nTotBytes := 0

hSrcFile := FOPEN( cSrc, FO_READ )
IF hSrcFile != -1
IF !FILE( cDest )
hDstFile := FCREATE( cDest )
ELSE
hDstFile := FOPEN( cDest, FO_WRITE )
FSEEK( hDstFile, 0, FS_END )
ENDIF

IF hDstFile != -1
DO WHILE .T.
nSrcBytes := FREAD( hSrcFile, @cBuffer, F_BLOCK )
IF nSrcBytes == 0
EXIT
ENDIF
nDstBytes := FWRITE( hDstFile, cBuffer, nSrcBytes )
IF nDstBytes < nSrcBytes
EXIT
ENDIF
nTotBytes += nDstBytes
ENDDO
FCLOSE( hDstFile )
ENDIF
FCLOSE( hSrcFile )
ENDIF
RETURN nTotBytes


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





Пост N: 20
Зарегистрирован: 31.05.07
ссылка на сообщение  Отправлено: 14.08.08 08:51. Заголовок: Подскажите пожалуйст..


Подскажите пожалуйста, как мне правильнее всего узнать какой видимый размер окна?
Я полагаю так, если объекту на форме установить .Col := 0 и сделать .Width := Form1.Width, правая граница объекта будет шире рабочей области окна. Таким образом выяснил, что размер окна это ширина - размер обрамления * 2.
Ладно, это все нормально, так типа и должно быть, просто минусуй 8 пикселов и все дела, но если пользователь стиль окна меняет, размер обрамления?
Как определить размер обрамления в окне?...
Не помню точно, в C++Builder или Delphi есть параметр окна InnerWidth | InnerHeight. Может я не внимательно доку листал?
Подскажите пожалуйста. Спасибо...

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




Пост N: 831
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 14.08.08 10:05. Заголовок: spair2k пишет: разм..


spair2k пишет:

 цитата:
размер окна это ширина - размер обрамления * 2



размер обрамления := GetBorderWidth()

Можно установить размер окна как необходимая видимая ширина + размер обрамления



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


Пост N: 128
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 15.08.08 20:34. Заголовок: Больше примеров с ис..


Больше примеров с использоанием IDE. Только Это направление может быть перспективным !!!

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

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