2013-12-14 7 views
2

Я создал подкласс # Mosaic1 из #SystemWindow, и я хотел бы контролировать начальное положение окна. Как мне это сделать? Класс #RealEstateAgent участвует, но как? Класс комментарий говоритИсходное положение SystemWindow (Cuis Smalltalk)

Responsible for real-estate management on the screen, 
which is to say, controlling where new windows appear, 
with what sizes, etc. 5/20/96 sw 

Поэтому я прошу объяснений, как настроить и использовать класс #RealEstateAgent.

Примечания:

  • #RealEstateAgent одноэлементно. Она имеет только методы стороне класса
  • Он только ссылается #SystemWindow
  • Новый SystemWindow получает свою первоначальную степень от класса RealEstateAgent >> standardWindowExtent

ответ

1

Одно из решений состоит в обход класса # RealEstateAgent и напишите свой собственный код для обработки начального размера и положения нового экземпляра SystemWindow.

Это может быть сделано путем переопределения SystemWindow >> openInWorld: степень:

openInWorld: aWorld extent: extent 
"This msg and its callees result in the window being activeOnlyOnTop" 
aWorld addMorph: self. 

self morphPosition: 
     (RealEstateAgent initialFrameFor: self world: aWorld) topLeft; 
     morphExtent: extent. 

aWorld startSteppingSubmorphsOf: self. 


"Do it deferred. Was needed for text cursor to start blinking 
    if (Preferences disable: #focusFollowsMouse) " 

WorldState addDeferredUIMessage: [ self activate ] 

Заменить

self morphPosition: 
     (RealEstateAgent initialFrameFor: self world: aWorld) topLeft; 
     morphExtent: extent. 

Вычислить

  • thePositionOfTheWindow
  • theExtentOfTheWindow

Затем сделайте

self morphPosition: thePositionOfTheWindow morphExtent: theExtentOfTheWindow. 
Смежные вопросы