|
#1
|
|||
|
|||
срочно помогите
Добрый день. Пожалуйста срочно нужна помощь.
Я уже создавала одну тему насчет того как сделать кнопки что бы если одна была не видима через проверку Button1.Visible := FileExists('c:/1.exe'); то другая ниже ее кнопка поднялась на ее место, мне предложили через координаты это сделать, плизз покажите пример а то что то совсем не соображу как это сделать программно??? |
#2
|
|||
|
|||
Код:
if not Button1.Visible then begin Button2.Top:=Button1.Top; Button2.Left:=Button1.Left; end; |
#3
|
|||
|
|||
Спасибо..сейчас проверю
|
#4
|
|||
|
|||
Блин так не пойдет, много кнопок, а как с помощью массива такое сделать?
|
#5
|
|||
|
|||
Собственно, тебе надо 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
|
|||
|
|||
Хм. Пусть у нас есть два массива:
Код:
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
|
|||
|
|||
Эх что-то у меня ничего не получается(((
|
#8
|
|||
|
|||
Что и где не получается?
|
#9
|
|||
|
|||
как этот массив ссылок создать? ( простите за такую глупость)
|
#10
|
|||
|
|||
А мож просто создать динамические кнопки?
|
#11
|
|||
|
|||
Дык код мой посомтри. Он этот массив и создает во время создания формы (FormCreate).
|
#12
|
|||
|
|||
Не совсем понял суть проблемы...Если надо чтобы при разных ситуациях одна и та же кнопка выполняла разные процедуры при нажатии то просто напишите все эти процедуры и назначайте на одну кнопку их в процессе выполнения программы (Button1.OnClick := 'название процедуры')
Либо напишите одну процедуру, но сделайте в ней case или группу if. Если вам надо чтобы у вас было куча кнопок в одном месте, но одна всегда сверху (не по координатам, а по слоям) то используйте для поднятия кнопки BringToFront (Button1.BringToFront) ну или для опускания SendToBack (Button1.SendToBack). |
#13
|
|||
|
|||
Спасибо всем буду пробывать
Последний раз редактировалось Sveta22, 14.11.2008 в 11:05. |
#14
|
||||
|
||||
пункт 2.4.
Цитата:
Кнопка "+" - весы в правом верхнем углу сообщения... |