Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.03.2019, 03:25
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Найти компонент по его .Top

Привет программисты.

У меня есть scrollbox, на нем в рантайме создаются Image, 40 шт.
Располагаются они по align = altop, друг за дружкой.

Нужно найти самый первый пустой Image, но первый не по номеру, а по top.
В моей программе эти Image могут быть перемешаны между собой, то бишь Image[1] может находится как сверху, так и снизу или по середине..

Что бы вы понимали, я прикреплю изображение.
Стрелкой указан img который нужно определить.


Можно даже без кода, просто в двух словах..
Ответить с цитированием
  #2  
Старый 29.03.2019, 06:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если в 2х словах, то примерно так:
Перебираешь ВСЕ имаджи. Если текущий не пустой, то пропускаешь его.
Если пустой, то проверяешь координаты. Если меньше, чем у уже выбранного, то запоминаешь новый.
Код пишу прямо тут, так что могу что-то напутать в названиях свойств и методов:
Код:
var
  I : Integer;
  TopImg : TImage;
begin
  TopImg := Nil;
  For I := 0 To ScrollBox1.ComponentCount-1 Do
    If ScrollBox1.Components[i] Is TImage Then
      Begin
        If (ScrollBox1.Components[i] As TImage).IsEmpty Then
          Begin
            If TopImg = Nil
              Then TopImg := ScrollBox1.Components[i] As TImage
              Else
                If (ScrollBox1.Components[i] As TImage).Top < TopImg.Top
                  Then TopImg := ScrollBox1.Components[i] As TImage
          End;
      End;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Gareth (29.03.2019)
  #3  
Старый 29.03.2019, 09:04
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, если в 2х словах, то примерно так:
Перебираешь ВСЕ имаджи. Если текущий не пустой, то пропускаешь его.
Если пустой, то проверяешь координаты. Если меньше, чем у уже выбранного, то запоминаешь новый.
Код пишу прямо тут, так что могу что-то напутать в названиях свойств и методов:
Код:
var
  I : Integer;
  TopImg : TImage;
begin
  TopImg := Nil;
  For I := 0 To ScrollBox1.ComponentCount-1 Do
    If ScrollBox1.Components[i] Is TImage Then
      Begin
        If (ScrollBox1.Components[i] As TImage).IsEmpty Then
          Begin
            If TopImg = Nil
              Then TopImg := ScrollBox1.Components[i] As TImage
              Else
                If (ScrollBox1.Components[i] As TImage).Top < TopImg.Top
                  Then TopImg := ScrollBox1.Components[i] As TImage
          End;
      End;
Спасибо, я понял принцип, но решил сделать немного по своему..
Столкнулся с проблемой, оба условия не срабатывают.
Код:
if IMG[i].Picture = nil then
begin
ShowMessage('aaa');
end;
if IMG[i].Picture.Graphic = nil then
begin
ShowMessage('aaa');
end;

Как еще можно проверить TImage на отсутствие пикчи в ней?
ПРобовал при создании Image`a ставить nil, но безрезультатно.

delphi rio
win10

Последний раз редактировалось Gareth, 29.03.2019 в 09:07.
Ответить с цитированием
  #4  
Старый 29.03.2019, 18:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я же не просто написал IsEmpty. Есть там где-то такой метод.

UPD. Посмотрел доку. Есть св-во Empty у TImage.Picture.Graphic

Последний раз редактировалось lmikle, 29.03.2019 в 18:38.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Gareth (30.03.2019)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter