Написать что либо в клиентской области 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)
#ENDATWBR, 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, то все что мы нарисовали может оказаться почиканым.
 Так вот если ему дать отрисоваться, то есть выполнить 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-у чего-нить нарисовать? правильно? вдруг ему картинку в фоне отобразить надо
 Так вот если ему дать отрисоваться, то есть выполнить CallWindowProc, то все что мы нарисовали может оказаться почиканым.
 Так вот если ему дать отрисоваться, то есть выполнить 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)
- 
				Гость
 Тяпница, однако
 Тяпница, однако 