В приведенном ниже коде есть (как минимум) две проблемы: кнопка Copy
не обновляет буфер обмена, а edit_box
не показывает вертикальную полосу прокрутки, когда это необходимо.
Shoes.app (:title => "Test", :width => 1000, :height => 600) do
background "#DFA"
stack :margin => 30 do
flow do
button "Paste" do
@sql.text = clipboard
end
button "Copy", :margin_left => 15 do
clipboard = @sql.text
alert(@sql.text.length.to_s + " characters copied to clipboard.")
end
end
stack :margin_top => 10, :width => "100%", :height => 500, :scroll => true do
@sql = edit_box :width => "100%", :height => "100%"
end
end
end
Кнопка Paste
правильно вставляет содержимое буфера обмена в edit_box
. Если вы вносите изменения, а затем нажимаете Copy
, в сообщении alert
отображается правильное количество символов. Если вы снова нажмете Paste
, исходное содержимое буфера обмена будет вставлено. Кнопка Copy
никогда не обновляет буфер обмена правильно.
Кроме того, если вы сгенерируете больше строк, чем умещаете edit_box
, путем редактирования или вставки, полоса прокрутки никогда не появится.
Любая помощь по этим двум вопросам будет высоко ценится. Моя среда - Windows XP, если это помогает.
ОБНОВЛЕНИЕ С ОТВЕТАМИ: Спасибо @Pesto за ответ на вопрос о буфере обмена. Оказывается, квалификация clipboard
с app.
или self.
работает, как и ожидалось, для кнопок Paste
и Copy
.
После более глубокого изучения проблемы с полосой прокрутки, я понимаю, что edit_box
не показывает полосу прокрутки. Полоса прокрутки в обуви применяется только к слотам (stack
и flow
), а не к отдельным элементам, таким как edit_box
. Высота edit_box
указана таким образом, чтобы она всегда помещалась в пределах stack
, поэтому stack
никогда не требуется полоса прокрутки. Это привело меня к обходному пути, который не идеален, но приемлем для моего приложения. Просто измените высоту edit_box
на большее, чем необходимо, например "10000px"
, и появится полоса прокрутки. К сожалению, он есть, нужен он или нет, но это лучше, чем отсутствие полосы прокрутки. Я уверен, что некоторые дополнительные операции могут динамически изменить высоту edit_box
, чтобы точно соответствовать содержимому, так что полоса прокрутки появится только при необходимости.