Написать что либо в клиентской области Frame
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Hi.
В CW2 в TeenTools-ах был такой шаблончик:
Я думаю, доработаешь под свои нужды.
WBR, Nick Tsigouro mailto:nick@arsis.ru
Написал: ClaList(2)
В CW2 в TeenTools-ах был такой шаблончик:
Код: Выделить всё
#EXTENSION (MDIBackground, 'Image on the MDI
background'),PROCEDURE,HLP('MDIBackground')
#!
#! Version: 2.0
#! Author: George Petrov
#! Dated : 27.05.1996
#! e-Mail: George.Petrov@Princen-IT.nl or 100276,2655 at CompuServe
#!
#SHEET
#TAB('Image on the MDI background')
#DISPLAY('')
#DISPLAY('This extension will put an image on the background')
#DISPLAY('of the Main MDI window.')
#DISPLAY(' Copyright (c)
1996')
#DISPLAY(' George Petrov')
#ENABLE(%True)
#SHEET
#TAB('Image Properties')
#PROMPT('File Name:',OPENDIALOG('Pick an Image
File','Bitmap!*.BMP!PaintBrush!*.PCX!Graphic Interchange
Format!*.GIF!JPEG!*.JPG!Windows metafile!*.WMF!All Files!*.*!All Graphics
Formats!*.BMP;*.ICO;*.PCX;*.GIF;*.JPG;*.WMF')),%ImageFileName
#PROMPT('Display 3D Border', CHECK),%Border3D,DEFAULT(0)
#PROMPT('Auto Center', CHECK),%AutoCenter,DEFAULT(1)
#PROMPT('Auto Size', CHECK),%AutoSize,DEFAULT(1)
#PROMPT('Palette', CHECK),%TINUSEPALETTE,DEFAULT(0)
#ENABLE(%AutoCenter=1)
#DISPLAY(' NOTE: To Use Auto Center you have to add the')
#DISPLAY(' IMMEDIATE attribute to the MDI Window')
#ENDENABLE
#ENABLE(%AutoSize=0)
#PROMPT('Width:',SPIN(@n5,1,1500,10)),%ImageWidth,DEFAULT(150)
#PROMPT('Height:',SPIN(@n5,1,1500,10)),%ImageHeight,DEFAULT(100)
#ENDENABLE
#ENABLE(%TINUSEPALETTE)
#PROMPT('Colors:',SPIN(@n5,1,1500,1)),%TINPALETTESIZE,DEFAULT(256)
#ENDENABLE
#ENDTAB
#ENDSHEET
#ENDENABLE
#ENDTAB
#ENDSHEET
#ATSTART
#DECLARE(%BackWindowAT)
#DECLARE(%BackWindowFrame)
#DECLARE(%BackImageAT)
#DECLARE(%TINSETPALETTE)
#IF(%Border3D)
#SET(%BackWindowFrame,'GRAY,DOUBLE')
#ELSE
#SET(%BackWindowFrame,'NOFRAME')
#ENDIF
#IF(%TINUSEPALETTE)
#SET(%TINSETPALETTE,',PALETTE(' & %TINPALETTESIZE & ')')
#ELSE
#SET(%TINSETPALETTE,'')
#ENDIF
#IF(%AutoSize)
#SET(%BackWindowAT,'')
#SET(%BackImageAT,'')
#ELSE
#SET(%BackWindowAT,',AT(,,' & %ImageWidth & ',' & %ImageHeight & ')')
#SET(%BackImageAT,',FULL')
#ENDIF
#IF(%AutoCenter)
#IF(EXTRACT(%WindowStatement,'IMM') = %False)
#ERROR(%Procedure & ': Select the IMMEDIATE attribute on the window
structure!')
#ERROR(%Procedure & ': No Auto Center code generated')
#ENDIF
#ENDIF
#ENDAT
#AT(%DataSectionBeforeWindow )
MDILogoThread LONG
#ENDAT
#AT(%ModuleDataSection)
MAP
%Window:Background()
MODULE('')
DisableWindow(USHORT,SHORT
Enabled=False),PASCAL,NAME('EnableWindow')
END
END
#ENDAT
#AT(%AfterWindowOpening)
MDILogoThread = START(%Window:Background)
#ENDAT
#AT( %WindowEventHandling, 'sized' ),WHERE(%AutoCenter)
POST( 550h, , MDILogoTHread )
#ENDAT
#AT(%ProcedureRoutines)
%Window:Background PROCEDURE
BackWindow
WINDOW(''),MDI,CENTER,%BackWindowFrame%BackWindowAT%TINSETPALETTE
IMAGE('%ImageFileName'),USE(?BackImage)%BackImageAT
END
CODE
OPEN(BackWindow)
BackWindow{PROP:Width} = ?BackImage{PROP:Width}
BackWindow{PROP:Height} = ?BackImage{PROP:Height}
BackWindow{PROP:Center} = True
DisableWindow(BackWindow{PROP:Handle})
ACCEPT
Case Event()
#IF(%AutoCenter)
Of 550h
BackWindow{PROP:Center} = True
#ENDIF
of EVENT:CloseWindow
Break
end
END
CLOSE(BackWindow)
#ENDAT
WBR, Nick Tsigouro mailto:nick@arsis.ru
Написал: ClaList(2)
Спасибо, посмотрю, но сдается мне с первого взгляда - это просто вставка картинок в клиентскую область (это как раз не проблема), а мне нужно что-то типа реализованное у SealSoft в продукте xFText. Судя по цене ($49) - это не так просто, но хотя бы узнать где-копать в API
С уважением,
Леонид Мартюшев
Написал: ClaList(2)
С уважением,
Леонид Мартюшев
Написал: ClaList(2)
Ну все зависит от того, что нужно. Если просто текст - добавь в окошко свои контролы. Если фигуристый текст - сделай в шопе картинку. Или тебе нужна живая картинка типа телеграфной ленты? Если оживлять - посылай (по таймеру) свои события и отрисовывай (Display). Т.е. примерно так, как обрабатывается ресайз фрейма. М.б. на время отрисовки придется снять с окна disable:
WBR, Nick Tsigouro
Написал: ClaList(2)
Код: Выделить всё
Of Event:UserRedraw
DisableWindow(BackWindow{PROP:Handle}, True)
...
Display
DisableWindow(BackWindow{PROP:Handle})
Написал: ClaList(2)
Это как можно во Frame штатно добавить какие-либо контролы?Ну все зависит от того, что нужно. Если просто текст - добавь в окошко свои контролы.
Особливо чего-то хитрого не надо. Некая текстовка посередине, а в правом нижнем углу копирайты, версия...Если фигуристый текст - сделай в шопе картинку. Или тебе нужна живая картинка типа телеграфной ленты? Если оживлять - посылай (по таймеру) свои события и отрисовывай (Display). Т.е. примерно так, как обрабатывается ресайз фрейма. М.б. на время отрисовки придется снять с окна disable:
В принципе, проще нарисовать картинку и использовать как обои, но хотелось бы научиться "писать", а то постоянно картинку перерисовывать...
--
С уважением,
Леонид Мартюшев
Написал: ClaList(2)
Так не во фрейм. Там же открывается обычное дочернее окно, которое потом дизейблится. На него можно добавлять все, что угодно.Это как можно во Frame штатно добавить какие-либо контролы?
Так писанину тоже надо перерисовывать, как минимум при ресайзе. Текстовку - в центр, копирайты в угол.В принципе, проще нарисовать картинку и использовать как обои, но хотелось бы научиться "писать", а то постоянно картинку перерисовывать...
WBR, Nick Tsigouro
Написал: ClaList(2)
А поподробнее... Где в
еще что-то, кроме меню и тулбара? Это что-то скрытое и недокументированное. Ну а тогда, если я его визуально не вижу, как что-либо можно добавить? Может есть у тебя примерчик?
С уважением,
Леонид Мартюшев
Написал: ClaList(2)
Код: Выделить всё
AppFrame APPLICATION...
END
С уважением,
Леонид Мартюшев
Написал: ClaList(2)
Копать надо в сторону изучения механизма обработки события WM_PAINT для клиентской части окна фрейма. Это вообще одна из первых тем в любом учебнике по программированию в Windows. Точнее вторая, первой обычно везде идет создание и регистрация класса окна, создание самого окна и стандартный цикл обработки событий 
Примеры на Clarion такой обработки можно опять же встретить на http://www.clarionlife.net
Типа рисование какие-нить графических примитивов в окне.
В общем, если на пальцах, все очень просто:
1. Сабклассим клиентскую часть окна {PROP:ClientHandle}.
2. Ловим WM_PAINT
3. (BeginPaint) дает нам контекст hDC в котором следует рисовать.
4. Создаем нужный нам шрифт hFont (см. например (CreateFontIndirect))
5. Устанавливаем в контексте hDC нужный цвет (SetTextColor) и выбираем (SelectObject) в этом hDC полученный шрифт hFont.
6. Пишем наш текст (TextOut), (DrawText)
7. Восстанавливаем (SelectObject) в hDC прежний цвет и шрифт, эти прежние значения надо сохранить при установке нашего
цвета и шрифта.
8. Удаляем шрифт (DeleteObject)
9. Заканчиваем рисовать (EndPaint)
Что дальше?
А дальше надо ить дать и Clarion-у чего-нить нарисовать? правильно? вдруг ему картинку в фоне отобразить надо
Так вот если ему дать отрисоваться, то есть выполнить CallWindowProc, то все что мы нарисовали может оказаться почиканым.
Вот поэтому указанная выше стандартная процедура обработки WM_PAINT не совсем нам подходит, и BeginPaint/EndPaint придется убрать, а контекст получать функцией CetDC. То есть:
1. Сабклассим клиентскую часть окна {PROP:ClientHandle}.
2. Ловим WM_PAINT
3. Даем Clarion отрисоваться
RetValue = CallWindowProc(WndProc:Address, hWnd, wMsg, wParam, lParam)
3. Получаем контекст hDC (GetDC)
4. Создаем нужный нам шрифт hFont (см. например (CreateFontIndirect))
5. Устанавливаем в контексте hDC нужный цвет (SetTextColor) и выбираем (SelectObject) в этом hDC полученный шрифт hFont.
6. Пишем наш текст (TextOut), (DrawText)
7. Восстанавливаем (SelectObject) в hDC прежний цвет и шрифт, эти прежние значения надо сохранить при установке нашего цвета и шрифта.
8. Удаляем шрифт (DeleteObject)
9. Освобождаем контекст (ReleaseDC)
10. RETURN RetValue
Пример (рисование квадратиков), как я говорил есть на на http://www.clarionlife.net
Удачи!
__________________________________
Владимир Якимченко (IСQ 16 993 194)
Написал: ClaList(2)

Примеры на Clarion такой обработки можно опять же встретить на http://www.clarionlife.net
Типа рисование какие-нить графических примитивов в окне.
В общем, если на пальцах, все очень просто:
1. Сабклассим клиентскую часть окна {PROP:ClientHandle}.
2. Ловим WM_PAINT
3. (BeginPaint) дает нам контекст hDC в котором следует рисовать.
4. Создаем нужный нам шрифт hFont (см. например (CreateFontIndirect))
5. Устанавливаем в контексте hDC нужный цвет (SetTextColor) и выбираем (SelectObject) в этом hDC полученный шрифт hFont.
6. Пишем наш текст (TextOut), (DrawText)
7. Восстанавливаем (SelectObject) в hDC прежний цвет и шрифт, эти прежние значения надо сохранить при установке нашего
цвета и шрифта.
8. Удаляем шрифт (DeleteObject)
9. Заканчиваем рисовать (EndPaint)
Что дальше?
А дальше надо ить дать и Clarion-у чего-нить нарисовать? правильно? вдруг ему картинку в фоне отобразить надо

Вот поэтому указанная выше стандартная процедура обработки WM_PAINT не совсем нам подходит, и BeginPaint/EndPaint придется убрать, а контекст получать функцией CetDC. То есть:
1. Сабклассим клиентскую часть окна {PROP:ClientHandle}.
2. Ловим WM_PAINT
3. Даем Clarion отрисоваться
RetValue = CallWindowProc(WndProc:Address, hWnd, wMsg, wParam, lParam)
3. Получаем контекст hDC (GetDC)
4. Создаем нужный нам шрифт hFont (см. например (CreateFontIndirect))
5. Устанавливаем в контексте hDC нужный цвет (SetTextColor) и выбираем (SelectObject) в этом hDC полученный шрифт hFont.
6. Пишем наш текст (TextOut), (DrawText)
7. Восстанавливаем (SelectObject) в hDC прежний цвет и шрифт, эти прежние значения надо сохранить при установке нашего цвета и шрифта.
8. Удаляем шрифт (DeleteObject)
9. Освобождаем контекст (ReleaseDC)
10. RETURN RetValue
Пример (рисование квадратиков), как я говорил есть на на http://www.clarionlife.net
Удачи!
__________________________________
Владимир Якимченко (IСQ 16 993 194)
Написал: ClaList(2)