Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/67: Рейтинг темы: голосов - 67, средняя оценка - 4.70
2 / 2 / 1
Регистрация: 18.11.2009
Сообщений: 43

Задание параметров для Anchors

22.01.2010, 20:13. Показов 12711. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в TButton есть свойство Anchors, а в нем определены [akLeft, akTop, akRight, akBottom]
Как в коде устанавливать значения для [akLeft, akTop, akRight, akBottom] ?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2010, 20:13
Ответы с готовыми решениями:

StatusBar + Anchors
Доброго дня.Ребят, как сделать что бы при разворачивании программы на весь экран последний элемент StatusBar1 Перемещался в право ? ...

StatusBar + PageControl (Anchors)
Доброго дня Подскажите как правильно решить мою проблему Одна и та же программа на разных ОС(Server 2003/7/8) выглядит по разному ...

Задание параметров для flash-объекта в HTML-файле запуска
Добрый вечер,всем!!! Только пытаюсь разобраться в AC 3.0. Нужно создать HTML-файл запуска и задать в нем параметры для...

22
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
24.01.2010, 00:49
Лучший ответ Сообщение было отмечено как решение

Решение

Можно так:
C++
1
Button1->Anchors = Button1->Anchors << akRight << akTop << akLeft;
Или вот так:
C++
1
2
3
4
TAnchors A;
A.Clear();
A = A << akRight << akBottom << akTop << akLeft;
Button1->Anchors = A;
5
2 / 2 / 1
Регистрация: 18.11.2009
Сообщений: 43
24.01.2010, 03:04  [ТС]
спасибо)
Если не сложно можешь сказать как эта штука правильно называется, чтобы почитать про нее можно было (A << akRight << akBottom << akTop << akLeft). Как работать с ней теперь понятно, но что это такое, понять не могу)
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
24.01.2010, 17:10
Лучший ответ Сообщение было отмечено как решение

Решение

DragoDemon,

<< - это оператор, выполняющий арифметический сдвиг разряда в левую сторону.
А - в моём примере, это переменная типа TAnchors.
akRight, akBottom, akTop, akLeft - константы перечисляемого типа, описанные в Controls.hpp:

C++
1
enum TAnchorKind { akLeft, akTop, akRight, akBottom };
2
 Аватар для ClearSky
7 / 7 / 0
Регистрация: 24.03.2010
Сообщений: 10
18.04.2010, 19:52
MiCr0s0fT, Добрый день! У меня подобная проблема, но с компонентом TTabbedNoteBook. Имеются 4 вкладки. На всех одинаковые элементы, скопированы были с первой вкладки. Анкоры для всех элементов выставлены как нужно. У меня на вкладках StringGrid и кнопки: кнопки должны сдвигаться вправо, сетка должна растягиваться до определённых размеров (Align = AllClient здесь мне не подходит).

При запуске программы, на той вкладке, которая открывается по умолчанию - всё идеально, растягивается и применяется как нужно. Но как только я переключаюсь на другую вкладку - все элементы на ней не применяют свои анкоры! Я пробовал прописывать анкоры в коде, как показано выше - дебаг показывает, что заходит в функцию и применяет анкоры (я так подозреваю) - но ничего не изменяется! Обработку делаю в событии OnChange:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm_Main::TabsChange(TObject *Sender, int NewTab,
      bool &AllowChange)
{
  if(NewTab == 0)
  {
    Grid0->Anchors = Grid0->Anchors << akRight << akBottom << akTop << akLeft;
  }
  if(NewTab == 1)
  {
    Grid1->Anchors = Grid2->Anchors << akRight << akBottom << akTop << akLeft;
  }
  if(NewTab == 2)
  {
    Grid2->Anchors = Grid2->Anchors << akRight << akBottom << akTop << akLeft;
  }
  if(NewTab == 3)
  {
    Grid3->Anchors = Grid3->Anchors << akRight << akBottom << akTop << akLeft;
  }
}
Ничего не происходит. Если выставляю по умолчанию вторую или 4 вкладку, к примеру, теперь на ней при запуске всё идеально - а на всех других ничего не применяется!

Подскажите, пожалуйста, как можно исправить эту проблему, сроки сдачи горят, а тут внезапно выскочил такой баг Заранее спасибо!
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
18.04.2010, 20:37
ClearSky, Добрый день.

1. То, что элементы потеряли свойства Anchors - вина компонента TTabbedNoteBook (Устарел он уже морально. Ещё с Windows 3.1 тянется). Взамен ему в RAD Studio реализован компонент TPageControl. Настоятельно рекомендую использовать его. Даже в дизайн-режиме ощутите разницу.

2. Присвоение Anchors не стоит делать при каждом переключении вкладки, зачем вам лишние действия...

3. А решение вашей проблемы описано мною чуть выше. Попробуйте вот так:
C++
1
2
3
4
  TAnchors A;
  A.Clear();
  A = A << akRight << akBottom << akTop << akLeft;
  Grid0->Anchors = A;  Grid1->Anchors = A;  Grid2->Anchors = A;  Grid3->Anchors = A;
2
 Аватар для ClearSky
7 / 7 / 0
Регистрация: 24.03.2010
Сообщений: 10
18.04.2010, 20:44
MiCr0s0fT, Спасибо за быстрый ответ!

Попробовал ваш способ - но ничего не изменилось - анкоры всё ещё не применяются. Может быть я использую не то событие, и не в том компоненте? ))
Вопрос: будет ли этот способ работать с TTabbedNotebook?

Почему я не использовал TTabConrol с вкладки Win32: я ставлю на вкладку кнопку - при переключении на все остальные вкладки - она там тоже видна - полная лажа )) Я так понял, что при этом надо использовать дополнительный компонент - TPageControl, о котором вы и говорите - но в нём я не нашёл свойства для задания имён и количества вкладок Может подскажете примером?
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
18.04.2010, 20:57
ClearSky, только что собрал проект с TTabbedNotebook (справа) и TPageControl (слева).
На каждой странице имеется TStringGrid. Попробуйте растянуть приложение - Anchors сброшены изначально. После нажатия на кнопку "Установить Anchors" - компоненты TStringGrid установят себе Anchors и будут изменять размер пропорционально окно.

Проект я прилагаю, скачать можете отсюда: TestAnchorsGrid.rar
Проект собран в RAD Studio 2010.
2
 Аватар для ClearSky
7 / 7 / 0
Регистрация: 24.03.2010
Сообщений: 10
18.04.2010, 21:04
MiCr0s0fT, Спасибо за пример!

Делаю точно так же, но внимание! Это работает ТОЛЬКО если нажать кнопку Установить Anchors сразу же после запуска приложения! Что же делаю я: я делаю Maximize окну - и потом жму на кнопку Установить Anchors - и всё, анкоры не применяются Может Maximize как-то сбрасывает анкоры?
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
18.04.2010, 21:21
ClearSky, вы имеете ввиду
C++
1
WindowState = wsMaximized;
???

Попробовал так:
C++
1
2
3
4
5
6
7
8
9
10
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  TAnchors A;
  A.Clear();
  A = A << akRight << akBottom << akTop << akLeft;
  StringGrid1->Anchors = A;  StringGrid2->Anchors = A;  StringGrid3->Anchors = A;  StringGrid5->Anchors = A;  StringGrid6->Anchors = A;
 
  WindowState = wsMaximized;
}
И точно также, только сначала установил wsMaximized.

Работает и так, и так.
1
 Аватар для ClearSky
7 / 7 / 0
Регистрация: 24.03.2010
Сообщений: 10
18.04.2010, 21:28
MiCr0s0fT, Я ставлю этот код в событие OnCreate моей формы - при запуске приложения. Пока что форма не развернута на весь экран - растягиваю - анкоры не применены. Затем я её разворачиваю по двойному клику на заголовке окна - окно разворачивается - анкоры не применены. Вынес дополнительно установку анкоров при нажатии на кнопку на форме (в кнопке прописал даже чтобы окно максимизировалось, как у вас в коде) - анкоры не применены. Без понятия, что может быть? Использую C++ Builder 6. На счёт вашего приложения я говорил когда просто запустил ЕХЕ файл, то есть в режиме run вашей программки - там тоже при развёрнутом окне не применялись анкоры.
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
18.04.2010, 21:34
ClearSky, инициализация формы наступит раньше её создания. Можно обойтись и без OnCreate.

Можно ещё попробовать обдурить всё и всех...
Обработайте событие OnResize для Form. И туда вставьте тот же код
1
 Аватар для ClearSky
7 / 7 / 0
Регистрация: 24.03.2010
Сообщений: 10
18.04.2010, 21:57
MiCr0s0fT, Я уже и об этом подумал ))) Просто мне показалось, что OnResize как-то тоже сбрасывает анкоры. )) Короче, не работает никак, хоть ты убейся ))))

Может быть поможет эта информация: при запуске проги, у меня стоит окно с вводом логина и пароля - по совместительству оно является главной формой. При верных данных - эта главная форма скрывается (Form->Hide() - и открывается та, с которой я работаю. Может быть как-то это скрытие предыдущей формы тоже влияет на это? )))

Хотя - всё это на самом деле никак на это не может влиять - так как если я устанавливаю у TabbedNoteBook по дефолту открывать вкладку - либо 1, либо 2, либо каку-то другую - на этой вкладке при запуске - всё работает идеально! Мистика, как будто анкоры применяются только для одной вкладки (это объяснилось вашим ответом о недостатке этого компонента) и потом они как-будто Read-Only становятся )))) Может быть есть какой-то AnchorRefresh() метод? Ну или Form->Refresh() как-то использовать? ))

Добавлено через 11 минут
MiCr0s0fT, Экспериментальным путём было установлено, что все вышеуказанные примеры работают ТОЛЬКО для той вкладки - которая является вкладкой по умолчанию при запуске! Мистика да и только - непонятно почему не применяются анкоры для других вкладок!

В голову приходит мысль: при запуске программы пройтись циклом и каждую из них сделать дефолтной, чтобы все акоры применились )))))) Чего только в голову не придёт, когда всё работает не так, как нужно
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
18.04.2010, 22:00
ClearSky, ой ужас ... Есть более интересное решение: Поставьте RAD Studio 2010 или 2009 (но не 2007).

Не мучайтесь. Данная неполадка - не ваша вина.
1
 Аватар для ClearSky
7 / 7 / 0
Регистрация: 24.03.2010
Сообщений: 10
18.04.2010, 22:06
MiCr0s0fT, А проект из C++ Builder 6 туда сможет мигрировать без проблем? Ибо мне его сдавать послезавтра, начинать всё переделывать не вариант И ещё вопрос: на счёт таблетки к RAD 2010 - можно будет заполучить её, на почту например? )) Я не могу найти, где тут отправлять личные сообщения на форуме, перерыл всё ))
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
19.04.2010, 00:22
ClearSky, на счёт таблетки - без проблем
По поводу ЛС - справа от ника есть стрелочка вниз, там всплывающее меню ... в нём "отправить личное сообщение"

Теперь по поводу миграции к RAD 2010.
В RAD Studio многие компоненты получили пополнительные события и методы. При открытии старых проектов происходит автообновление.
Изменению сильно подверглась вкладка Internet ... теперь владения перешли к InDy. (если у вас в проекте есть взаимодействие через компоненты TCPClient и подобные - лучше пока не обновляться)

В любом случае, ставьте RAD 2010 не удаляя BCB 6
2
 Аватар для ClearSky
7 / 7 / 0
Регистрация: 24.03.2010
Сообщений: 10
19.04.2010, 21:16
MiCr0s0fT, Спасибо, разобрался во всём!

Скачал RAD 2010, там таблетка только для Delphi... Есть для C++ Builder у вас?

Проблему анкоров решил просто через PageControl компонент, как вы и посоветовали ))) Так что, теперь всё идеально. Запустил RAD - красота, напоминает Visual Studio ))) Надо будет попробовать с ней поработать!
1
2 / 2 / 1
Регистрация: 18.11.2009
Сообщений: 43
21.04.2010, 20:22  [ТС]
Проблему с этими Анкорами я до сих пор так и не решил=)
вот на примере вашего приложения... если я правильно понял, то правая и левая таблицы должны растягиваться пропорционально, т.е. промежуток между ними должен оставаться неизменным, НО у меня по какой то причине ширина таблиц остается неизменной при растягивание, а промежуток между ними увеличивается

Что я делал:
  1. запустил ваш ехешник
  2. нажал "установить Анкоры"
  3. потянул за уголок

*прилагаю скриншот:
Миниатюры
Задание параметров для Anchors  
0
 Аватар для ClearSky
7 / 7 / 0
Регистрация: 24.03.2010
Сообщений: 10
22.04.2010, 23:22
Насколько я понял, в данном случае - показано растягивание самого компонента StringGrid по высоте, в данном случае, про расстояние между таблицами вроде никто не говорил.
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
23.04.2010, 17:12
DragoDemon, в своём приложении я показывал, как решается проблема с Anchors внутри StringGrid (почитайте предыдущую страницу, там есть вопрос от
ClearSky, или откройте код, посмотрите действие)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2010, 17:12
Помогаю со студенческими работами здесь

Задание параметров в Simulink(+)
Вечер добрый. Один из способов задания параметров в Simulink - это через .m файл (в файле создаем переменные с присвоенными значениями, а...

Задание начальных параметров
Создал модель для решения ДУ в simulink, подскажите пожалуйста как установить параметры моделирования такого плана u(0.3) = 2.5, u(1.1) =...

Задание параметров сеанса
Всем доброго дня! Начала разбираться в RLS, столкнулась со следующей проблемой. В системе есть роль &quot;Юзер&quot;. Я задаю для нее...

Задание параметров на датчик 4-20
В кипе не давно, вопрос можно ли коим либо образом задать шкалу уровнемеру который имеет лишь токовую петлю и никаких более примочек типа...

TableLayoutPanel программное задание параметров
Подскажите почему не меняются первая строка и столбец по ширине и длине? TableLayoutRowStyleCollection styles =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru