Alex7wrt
Пользователи-
Постов
508 -
Зарегистрирован
-
Посещение
-
Победитель дней
31
Весь контент Alex7wrt
-
Я не целиком знаком с Вашей задумкой, но как вариант: Для каждой кнопки также объявить логическую переменную, которая будет отвечать за то, двигали ли уже этой кнопкой. В событии OnMouseMove присвоить логической переменной этой кнопки true и переменным, соответствующим этой кнопке координаты ее центра. В событии OnPaint формы для каждой кнопки проверять, если логическая переменная true, то рисуем линию по координатам соответствующей кнопки. Да, как заметил xenon54, ключевой момент - в OnPaint нужно все время отрисовывать то, что Вы хотите видеть.
-
Гораздо проще для каждой кнопки объявить свою пару переменных, которые отвечают за координаты линии.
-
Создавать переменные для каждой кнопки
-
Или наоборот Все правильно.
-
Выше xenon54 писал об этом. Именно так
-
Как насчет того, чтобы для точности линнии вместо положения кнопки указывать положение ее центра?
-
Попробуйте Form1.Realign
-
Или Form1.Invalidate. Есть еще метод InvalidateRect Для перерисовки прямоугольного фрагмента формы.
-
Canvas.DrawLine(PointF(X1,Y1), PointF(X2,Y2), Opasiti: Single)
-
SomeObject.Position:=PointF(X,Y);
-
Можно, конечно. Просто определяйте координаты конца в OnMouseMove
-
Какой путь рисовать - решаете только Вы. Для рисования прямой линии можно вычислить координаты центра объекта в событии OnMouseDown, а затем их же в событии OnMouseUp, и построить линию по этим двум точкам.
-
В событии OnMouseMove помимо изменения координат перетаскиваемого элемента можно вызывать событие OnPaint главной формы и передавать координаты, по которым рисовать путь.
-
Осипов. Delphi. Программирование для Windows, OS X, iOS и Android. стр. 76. Листинг 4.11. Перемещение объектов с помощью мыши.
-
Смотрите в сторону обработки событий Drag & Drop, OnMouseDown, OnMouseMove, OnMouseUp
-
Так и сделано. Выбрана альбомная ориентация. После чего в коде появляется строка Application.FormFactor.Orientations := [TFormOrientation.Landscape]; Именно поэтому приложение на смартфоне и запускается принудительно в альбомном виде, то есть поворачивается при запуске в альбомную ориентацию из любой другой позиции. Но вопрос в том как при повороте избавиться от анимации этого поворота, чтобы приложение просто сразу запустилось в альбомной ориентации и все.
-
Спасибо за совет. Я прошу прощения, речь шла об альбомном режиме, а я по ошибке написал везде "портретный" Естественно, строка Application.FormFactor.Orientations := [TFormOrientation.Landscape]; присутствует. Иначе бы приложение не разворачивалось бы в альбомный режим. Но дело в том, что разворячивается оно долго с эффектом поворота. У таких приложений как Angry Birds тоже вроде есть поворот при запуске, но он практически не заметен.
-
Запуск с альбомной ориентацией на смартфоне
Alex7wrt опубликовал вопрос в Положение, размеры, выравнивание
Всем доброго времени суток. При запуске приложения с альбомной ориентацией на смартфоне, оно не просто запускается с появления заставки, а сначала воспроизводится анимация поворота экрана, после чего уже приложение приобретает альбомный вид. Вопрос в следующем: как сделать так, чтобы никаких поворотов не было, а приложение сразу запускалось в альбомном виде как например Angry Birds )). Среда XE7, Android 4.0.3 Спасибо за внимание. -
Большое спасибо за ответ, а также ссылки на информацию по вопросу. Правильно ли я понимаю, что в Android, кроме использования метода free с удаляемым объектом, нужно обнулить все ссылки на него, чтобы полностью освободить занимаемую им память? То есть помимо того, что в моем коде, нужно поудалять ссылки на удаляемые объекты?
-
Есть глобальный массив объектов var comp: array [1..12] of TRectangle; В процедуре создаю сами объекты и по 2 потомка к каждому из них procedure ......................... var element1, element2: TRectangle; i: byte; begin for i:=1 to n do begin comp[i]:=TRectangle.Create(form1); comp[i].Parent:=form1; ....................... element1:=TRectangle.Create(comp[i]); element1.Parent:=comp[i]; ........................ element2:=TRectangle.Create(comp[i]); element2.Parent:=comp[i]; ......................... end; end; В теле другой процедуры уничтожаю все объекты procedure ......................... var i: byte; begin for i:=1 to n do comp[i].free; end; Все как-бы работает. Но после многократного повторения этих процедур программа работает все медленнеее и медленнее с каждой следующей операцией создания-удаления. При этом никаких новых компонентов не создается. Поэтому и появились мысли, что не все компоненты удалены. Возможно остались неудаленными потомки. Пробовал изменить тело процедуры удаления на: for i:=1 to n do begin for j:=0 to comp[i].ChildrenCount-1 do comp[i].Children[j].Free; comp[i].Free; end; Но ничего не меняется. Поэтому прошу совета, в чем может быть причина замедления программы и как правильно удалять потомки. Программа для Android.
-
У Осипова получение снимка с камеры описано так: Осипов. Delphi. Программирование для Windows, OS X, iOS и Android. стр. 131. Предопределенные команды. 1. Разместите на форме элементы TImage, TButton и TActionList 2. Выберите кнопку и в Инспекторе объектов найдите свойство Action. Разверните комбинированный список и, пройдя по цепочке New Standard Action | Media Library, выберите предопределенную команду TTakePhotoFromCameraAction. 3. В окне Инспектора объектов перейдите на вкладку Events и найдите событие OnDidFinishTaking() для только что созданного командного объекта. 4. Двойной щелчок по строке события перенесет нас в редактор кода, в котором нам придется написать всего одну строку procedure TForm1.TakePhotoFromCameraActionlDidFinishTaking(Image: TBitmap); begin Image1.Bitmap.Assign(Image); end;