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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.11.2008, 12:31
Sveta22 Sveta22 вне форума
Прохожий
 
Регистрация: 29.10.2008
Сообщения: 31
Репутация: 10
По умолчанию срочно помогите

Добрый день. Пожалуйста срочно нужна помощь.
Я уже создавала одну тему насчет того как сделать кнопки что бы если одна была не видима через проверку Button1.Visible := FileExists('c:/1.exe'); то другая ниже ее кнопка поднялась на ее место, мне предложили через координаты это сделать, плизз покажите пример а то что то совсем не соображу как это сделать программно???
Ответить с цитированием
  #2  
Старый 13.11.2008, 12:37
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

Код:
if not Button1.Visible then
begin
  Button2.Top:=Button1.Top;
  Button2.Left:=Button1.Left;
end;
Ответить с цитированием
  #3  
Старый 13.11.2008, 12:44
Sveta22 Sveta22 вне форума
Прохожий
 
Регистрация: 29.10.2008
Сообщения: 31
Репутация: 10
По умолчанию

Спасибо..сейчас проверю
Ответить с цитированием
  #4  
Старый 13.11.2008, 12:55
Sveta22 Sveta22 вне форума
Прохожий
 
Регистрация: 29.10.2008
Сообщения: 31
Репутация: 10
По умолчанию

Блин так не пойдет, много кнопок, а как с помощью массива такое сделать?
Ответить с цитированием
  #5  
Старый 13.11.2008, 14:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,024
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Собственно, тебе надо 2 вещи:
1. Создать массив ссылок на кнопки
2. Сделать процку, кторая их разместит по вертикали или горизонтали с учетом видимости.

Кстати, альтернативный вариант. Делать кнопки не невидимыми, а запрещенными (св-во Enabled). Тогда не придется их двигать.

А теперь к коду. Заполнение масива расчитано на то, что кнопки лежат на самой форме и являются TButton.

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FButtonList : TList;
    procedure ReArrangeButtons(ASpace : Integer);
  public
    { Public declarations }
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  I : Integer;
begin
  FButtonList := TList.Create;
  For I := 0 To Self.ComponentCount-1 Do
    If Self.Components[i] Is TButton Then
      FButtonList.Add(Self.Components[i]);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FButtonList.Free;
end;

procedure TForm1.ReArrangeButtons(ASpace: Integer);
var
  I : Integer;
  ALeft : Integer;
begin
  ALeft := ASpace; // Place of 1st button
  For I := 0 To FButtonList.Count-1 Do
    If TButton(FButtonList[i]).Visible Then
      Begin
        TButton(FButtonList[i]).Left := ALeft; // Place button
        ALeft := ALeft + TButton(FButtonList[i]).Width + ASpace; // Calc left of next button
      End;
end;
Ответить с цитированием
  #6  
Старый 13.11.2008, 14:54
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

Хм. Пусть у нас есть два массива:
Код:
Positions=array of array integer; //здесь хранятся координаты Top кнопок в оригинальном положении
Buttons=array of array of TButton;
(Я так понял кнопки расположены рядами)
Пусть кнопка Buttons[i,j] не видна, тогда надо все кнопки что под ней сдвинуть вверх:
Код:
for k:=i+1 to <количество строк кнопок> - 1 do
begin
  Buttons[k,j].Top:=Positions[k-1,j];
end;
Когда кнопка снова стала видна:
Код:
for k:=i+1 to <количество строк кнопок> - 1 do
begin
  Buttons[k,j].Top:=Positions[k,j];
end;
Ответить с цитированием
  #7  
Старый 13.11.2008, 15:25
Sveta22 Sveta22 вне форума
Прохожий
 
Регистрация: 29.10.2008
Сообщения: 31
Репутация: 10
По умолчанию

Эх что-то у меня ничего не получается(((
Ответить с цитированием
  #8  
Старый 13.11.2008, 16:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,024
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Что и где не получается?
Ответить с цитированием
  #9  
Старый 13.11.2008, 17:15
Sveta22 Sveta22 вне форума
Прохожий
 
Регистрация: 29.10.2008
Сообщения: 31
Репутация: 10
По умолчанию

как этот массив ссылок создать? ( простите за такую глупость)
Ответить с цитированием
  #10  
Старый 13.11.2008, 17:59
Sveta22 Sveta22 вне форума
Прохожий
 
Регистрация: 29.10.2008
Сообщения: 31
Репутация: 10
По умолчанию

А мож просто создать динамические кнопки?
Ответить с цитированием
  #11  
Старый 13.11.2008, 18:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,024
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Дык код мой посомтри. Он этот массив и создает во время создания формы (FormCreate).
Ответить с цитированием
  #12  
Старый 13.11.2008, 18:52
Амон Амон вне форума
Прохожий
 
Регистрация: 09.11.2008
Сообщения: 14
Репутация: 10
По умолчанию

Не совсем понял суть проблемы...Если надо чтобы при разных ситуациях одна и та же кнопка выполняла разные процедуры при нажатии то просто напишите все эти процедуры и назначайте на одну кнопку их в процессе выполнения программы (Button1.OnClick := 'название процедуры')
Либо напишите одну процедуру, но сделайте в ней case или группу if.

Если вам надо чтобы у вас было куча кнопок в одном месте, но одна всегда сверху (не по координатам, а по слоям) то используйте для поднятия кнопки BringToFront (Button1.BringToFront) ну или для опускания SendToBack (Button1.SendToBack).
Ответить с цитированием
  #13  
Старый 14.11.2008, 08:17
Sveta22 Sveta22 вне форума
Прохожий
 
Регистрация: 29.10.2008
Сообщения: 31
Репутация: 10
По умолчанию

Спасибо всем буду пробывать

Последний раз редактировалось Sveta22, 14.11.2008 в 11:05.
Ответить с цитированием
  #14  
Старый 14.11.2008, 12:49
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

пункт 2.4.
Цитата:
2.4. Делайте заголовок темы информативным, старайтесь избегать заголовков типа: "Помогите!!!". Так же настоятельно советуем избегать излишнего использования ЗАГЛАВНЫХ букв.
.
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter