2010-08-18 1 views
0

Если я использую Delphi во время разработки, тогда, когда я копирую/вставляю группу компонентов во время разработки, вставленные компоненты слегка смещены от их оригиналов.Как слегка смещать вставленные компоненты при вызове PasteFromClipboard() в Delphi?

Однако я разрабатываю графический интерфейс, который позволяет пользователям разрабатывать графический интерфейс для другого приложения. Когда я вырезаю/вставляю вставные компоненты, лежат непосредственно над оригиналами. Есть ли способ слегка их компенсировать?

+1

Можете ли вы указать немного больше, как именно вы копируете/вставляете свои компоненты в свой код - возможно, некоторые строки кода тоже помогут. – iamjoosy

+0

+1 за то, что нашли время ответить, спасибо. Я использую методы CopyToClipboard() и PasteFromClipboard(), но *, это компоненты TMS, поэтому, возможно, я должен спросить TMS. Я просто предположил, что они унаследовали методы ... – Mawg

+1

Не нужно предполагать. У вас есть исходный код, по крайней мере, для элементов управления Delphi, поэтому проверьте его. Вы должны заметить, что базовые элементы управления VCL обычно не имеют методов, связанных с буфером обмена. Если они это сделают, это касается их * текстового содержимого *. Скопируйте TEdit в буфер обмена, и вы получите его текст; вы не получаете копию всего элемента управления. Задавать вопросы, связанные с TMS, здесь хорошо, но вам все равно нужно предоставить более подробную информацию. TMS имеет * лоты * компонентов; какие из них вы используете? –

ответ

3

Поскольку у вас есть основная копия/вставка, следующий бит является довольно простым расширением того, что у вас уже есть.

Вставка, разумеется, - предположительно - вставьте скопированные элементы управления с их скопированными значениями свойств, так что да, они перевернут поверх исходных элементов управления, из которых они были скопированы.

Для того чтобы выйти из режима настройки, вам нужно будет выполнить некоторую «подталкивание» вставленных элементов управления после они были вставлены. Если вы не можете получить список вложенных элементов управления более непосредственно, то одним из способов получить такой список будет сделать копию коллекции Компонентов целевой формы перед вставкой, затем после вставки итерации по Компоненты еще раз - любой элемент, находящийся сейчас в коллекции, а не в «оригинальном» списке, должен быть вставлен, и вы можете применить свои левые/верхние подталкивания к тем, которые требуются.

list := TList.Create; 
    try 
    for i := 0 to Pred(dest.ComponentCount) do 
     list.Add(dest.Components[i]); 

    // Do your pasting 

    for i := 0 to Pred(dest.ComponentCount) do 
     if list.IndexOf(dest.Components[i]) = -1 then 
     // Nudge dest.Components[i] 
    finally 
    list.Free; 
    end; 

Это должно заставить вас хотя бы возглавить в правильном направлении, я думаю.

ПРИМЕЧАНИЕ. В приведенном выше коде предполагается, что вы имеете дело (потенциально) с TComponent производные классы (то есть невизуальные компоненты). Если вы имеете дело только с TControl потомками, то вы можете оптимизировать работу с помощью ControlCount и Элементы управления управления контейнером назначения (не обязательно форма).

Кроме того, левая/верхняя позиция TComponent хранится в се/привет слово общественной DesignInfo собственности, поэтому ваш код подталкивание нужно будет принять во внимание и иметь дело с TComponent производный отличается от TControl, если вы работаете с не визуальными компонентами, а также с визуальным контролем.

+0

+1, который отлично смотрится - я пробою, чтобы попробовать. Спасибо – Mawg

+0

Отличный, ясный и подробный ответ. Благодаря! – Mawg

Смежные вопросы