2014-09-03 91 views
1

我想在Pharo 3.0中創建一個簡單的用戶界面。在某個地方我需要一個顏色選擇器,所以我想過使用ColorSelectorDialogWindowpharo中的事件系統

我的問題是,我不知道如何實際得到它的顏色。我已經看到它有一個selectedColor的消息,但是我錯過了一個當用戶點擊ok按鈕時實際捕獲事件的方法。

我試過on: send: to:但它似乎沒有幫助,無論如何我不知道事件名稱。我也看到,在確認該消息applyChanges被髮送到自己,所以我試着子類ColorSelectorDialogWindow只是添加

applyChanges 
    super applyChanges. 
    self triggerEvent: 'selectedColor' with: self selectedColor. 

但似乎我不能使用on: send: to:聽到我自己selectedColor事件。

什麼是正確的方式鉤入對話框好,更一般地發送組件之間的事件?

回答

1

還有公告,Pharo目前尚未很好記錄的部分。在工作區 試試這個:

| colorPicker | 
colorPicker := ColorSelectorDialogWindow new. 
colorPicker announcer when: ColorChanged do: [ :announcement | UIManager inform: 'Selected color: ' , announcement newColor asString ]. 
colorPicker open. 

這是一個可以在ColorChanged公告類註釋中發現的例子。
通過發送newColorColorChanged公告,可以獲得選定的顏色。

+0

謝謝,這項工作大多好。不過,它捕捉顏色選擇的時刻,而不是當它被確認。有什麼機會對用戶點擊確定? – Andrea 2014-09-03 22:55:56

+0

看來我可以看'WindowClosed'通知,然後檢查'宣告窗口取消'是真還是假。有什麼更直接的? – Andrea 2014-09-03 23:06:11

+0

看到我的第二個答案沒有公告的方法。 – MartinW 2014-09-04 08:05:55

1

您還可以模態地打開ColorSelectorDialogWindow。在這種情況下,對話框關閉後的openModal方法只返回,你可以得到直接從對話框中選擇的顏色:

| colorPicker | 
colorPicker := ColorSelectorDialogWindow new. 
colorPicker openModal. 
colorPicker cancelled 
    ifFalse: [UIManager inform: colorPicker selectedColor asString] 

你可能不希望把它莫代爾就像在我的例子,但模態的特定的其他窗口。在這種情況下,使用anyWindow openModal: colorPicker