Форум по 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,087
Версия 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
По умолчанию

Эх что-то у меня ничего не получается(((
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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