![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Задача на первый взгляд простая, но чтото вот не получается
вообщем на форме по горезонтале стоят 5 кнопок BitBtn, необходимо чтобы они красивым образом плано переехали в другое положени и расположились по вертикали. вот скинул код для реского перемещения 2х из них с одного положения в другое: Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
If (((Form1.BitBtn1.Top:=208) and (Form1.BitBtn1.Left:=200)) or ((Form1.BitBtn2.Top:=208) and (Form1.BitBtn2.Left:=288)))
Then begin
Form1.BitBtn1.Top:=16; Form1.BitBtn1.Left:=16;
Form1.BitBtn2.Top:=96; Form1.BitBtn2.Left:=16;
end;
end;
end.но вылезли 2ошибки: [Error] Unit1.pas(29): Operator not applicable to this operand type [Error] Unit1.pas(31): Type of expression must be BOOLEAN но мне то нужно чтоб все 5 передвигались и плавно, в дабавок без ошибок. Зарание спасибо, необходимо для проекта на зачет 1й стадии экзамена ![]() Последний раз редактировалось Admin, 21.05.2009 в 22:33. |
|
#2
|
||||
|
||||
|
Цитата:
Дак я пользовался, ток пост не добовлялся(( пишит типо вы слишком много добавили "функций" както так точно не помню |
|
#3
|
|||
|
|||
|
Когда люди научатся отличать оператор присваивания := от знака сравнения =?
=( Цитата:
Последний раз редактировалось Nyctos Kasignete, 21.05.2009 в 23:01. |
|
#4
|
||||
|
||||
|
=)) Эт точно
чтот засиделся-глупые ошибки блин, а как сделать что они плавно передвигались по диагонали вверх? |
|
#5
|
|||
|
|||
|
Вот, написала небольшой примерчик...
pas-файл: Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
procedure AnyBitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.AnyBitBtn1Click(Sender: TObject);
const
StepCount = 200; // число шажков от начального к конечному положению
var
i: Integer;
Btn1LT0, Btn2LT0, Btn3LT0, Btn4LT0, Btn5LT0: TPoint;
Btn1LT, Btn2LT, Btn3LT, Btn4LT, Btn5LT: TPoint;
begin
// находим начальные положения кнопок
Btn1LT0.X := BitBtn1.Left; Btn1LT0.Y := BitBtn1.Top;
Btn2LT0.X := BitBtn2.Left; Btn2LT0.Y := BitBtn2.Top;
Btn3LT0.X := BitBtn3.Left; Btn3LT0.Y := BitBtn3.Top;
Btn4LT0.X := BitBtn4.Left; Btn4LT0.Y := BitBtn4.Top;
Btn5LT0.X := BitBtn5.Left; Btn5LT0.Y := BitBtn5.Top;
// задаём конечные положения кнопок
Btn1LT.X := 400; Btn1LT.Y := 80;
Btn2LT.X := 400; Btn2LT.Y := 112;
Btn3LT.X := 400; Btn3LT.Y := 144;
Btn4LT.X := 400; Btn4LT.Y := 176;
Btn5LT.X := 400; Btn5LT.Y := 208;
// поехали...
for i := 1 to StepCount do
begin
BitBtn1.Left := Round(Btn1LT0.X + i * (Btn1LT.X - Btn1LT0.X) / StepCount);
BitBtn1.Top := Round(Btn1LT0.Y + i * (Btn1LT.Y - Btn1LT0.Y) / StepCount);
BitBtn2.Left := Round(Btn2LT0.X + i * (Btn2LT.X - Btn2LT0.X) / StepCount);
BitBtn2.Top := Round(Btn2LT0.Y + i * (Btn2LT.Y - Btn2LT0.Y) / StepCount);
BitBtn3.Left := Round(Btn3LT0.X + i * (Btn3LT.X - Btn3LT0.X) / StepCount);
BitBtn3.Top := Round(Btn3LT0.Y + i * (Btn3LT.Y - Btn3LT0.Y) / StepCount);
BitBtn4.Left := Round(Btn4LT0.X + i * (Btn4LT.X - Btn4LT0.X) / StepCount);
BitBtn4.Top := Round(Btn4LT0.Y + i * (Btn4LT.Y - Btn4LT0.Y) / StepCount);
BitBtn5.Left := Round(Btn5LT0.X + i * (Btn5LT.X - Btn5LT0.X) / StepCount);
BitBtn5.Top := Round(Btn5LT0.Y + i * (Btn5LT.Y - Btn5LT0.Y) / StepCount);
end;
end;
end.dfm-файл: Код:
object Form1: TForm1
Left = 192
Top = 114
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object BitBtn1: TBitBtn
Left = 8
Top = 384
Width = 75
Height = 25
Caption = 'BitBtn1'
TabOrder = 0
OnClick = AnyBitBtn1Click
end
object BitBtn2: TBitBtn
Left = 88
Top = 384
Width = 75
Height = 25
Caption = 'BitBtn2'
TabOrder = 1
OnClick = AnyBitBtn1Click
end
object BitBtn3: TBitBtn
Left = 168
Top = 384
Width = 75
Height = 25
Caption = 'BitBtn3'
TabOrder = 2
OnClick = AnyBitBtn1Click
end
object BitBtn4: TBitBtn
Left = 248
Top = 384
Width = 75
Height = 25
Caption = 'BitBtn4'
TabOrder = 3
OnClick = AnyBitBtn1Click
end
object BitBtn5: TBitBtn
Left = 328
Top = 384
Width = 75
Height = 25
Caption = 'BitBtn5'
TabOrder = 4
OnClick = AnyBitBtn1Click
end
endПоследний раз редактировалось Nyctos Kasignete, 22.05.2009 в 00:27. |
|
#6
|
||||
|
||||
|
Большое спасибо!)
на новой форме нормально рботает, а вот если прикрепляю к своему проекту, то не вкакую не движеется(( |
|
#7
|
|||
|
|||
|
При переносе в своё приложение там единственное, что нужно сделать, — это назначить всем пяти кнопкам (BitBtn1 ... BitBtn5) или какой-то одной из них эту процедуру как обработчик события OnClick. Ну, при желании можно изменить конечные положения кнопок. Если всё равно не получается, выложите сюда свой код, в который вставляете это.
|
|
#8
|
||||
|
||||
|
программа - бд каждая кнопка отвечает за фильтрацию, просто изначально кнопки у меня появляются в 1м месте по горизонтали, а потом ,при 1вом клике по одной из кнопок, с лева по вертикале.
вот как пришлось зделать: Код:
const
StepCount = 200;
var
Form2: TForm2;
i: Integer;
Btn1LT0, Btn2LT0, Btn3LT0, Btn4LT0, Btn5LT0: TPoint;
Btn1LT, Btn2LT, Btn3LT, Btn4LT, Btn5LT: TPoint;
implementation
uses Unit3, Unit1;
{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
Btn1LT0.X := BitBtn1.Left; Btn1LT0.Y := BitBtn1.Top;
Btn2LT0.X := BitBtn2.Left; Btn2LT0.Y := BitBtn2.Top;
Btn3LT0.X := BitBtn3.Left; Btn3LT0.Y := BitBtn3.Top;
Btn4LT0.X := BitBtn4.Left; Btn4LT0.Y := BitBtn4.Top;
Btn5LT0.X := BitBtn5.Left; Btn5LT0.Y := BitBtn5.Top;
Btn1LT.X := 16; Btn1LT.Y := 50;
Btn2LT.X := 16; Btn2LT.Y := 150;
Btn3LT.X := 16; Btn3LT.Y := 250;
Btn4LT.X := 16; Btn4LT.Y := 250;
Btn5LT.X := 16; Btn5LT.Y := 350;
for i := 1 to StepCount do
begin
BitBtn1.Left := Round(Btn1LT0.X + i * (Btn1LT.X - Btn1LT0.X) / StepCount);
BitBtn1.Top := Round(Btn1LT0.Y + i * (Btn1LT.Y - Btn1LT0.Y) / StepCount);
BitBtn2.Left := Round(Btn2LT0.X + i * (Btn2LT.X - Btn2LT0.X) / StepCount);
BitBtn2.Top := Round(Btn2LT0.Y + i * (Btn2LT.Y - Btn2LT0.Y) / StepCount);
BitBtn3.Left := Round(Btn3LT0.X + i * (Btn3LT.X - Btn3LT0.X) / StepCount);
BitBtn3.Top := Round(Btn3LT0.Y + i * (Btn3LT.Y - Btn3LT0.Y) / StepCount);
BitBtn4.Left := Round(Btn4LT0.X + i * (Btn4LT.X - Btn4LT0.X) / StepCount);
BitBtn4.Top := Round(Btn4LT0.Y + i * (Btn4LT.Y - Btn4LT0.Y) / StepCount);
BitBtn5.Left := Round(Btn5LT0.X + i * (Btn5LT.X - Btn5LT0.X) / StepCount);
BitBtn5.Top := Round(Btn5LT0.Y + i * (Btn5LT.Y - Btn5LT0.Y) / StepCount);
Application.ProcessMessages;
end;
Form2.Label1.Caption:='';
Form2.Panel1.Caption:='';
GroupBox7.Visible:=true;
GroupBox8.Visible:=true;
Table1.Filter:='Klas='''+'film''';
Table1.Filtered:=True;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
Btn1LT0.X := BitBtn1.Left; Btn1LT0.Y := BitBtn1.Top;
Btn2LT0.X := BitBtn2.Left; Btn2LT0.Y := BitBtn2.Top;
Btn3LT0.X := BitBtn3.Left; Btn3LT0.Y := BitBtn3.Top;
Btn4LT0.X := BitBtn4.Left; Btn4LT0.Y := BitBtn4.Top;
Btn5LT0.X := BitBtn5.Left; Btn5LT0.Y := BitBtn5.Top;
Btn1LT.X := 16; Btn1LT.Y := 50;
Btn2LT.X := 16; Btn2LT.Y := 150;
Btn3LT.X := 16; Btn3LT.Y := 250;
Btn4LT.X := 16; Btn4LT.Y := 350;
Btn5LT.X := 16; Btn5LT.Y := 450;
for i := 1 to StepCount do
begin
BitBtn1.Left := Round(Btn1LT0.X + i * (Btn1LT.X - Btn1LT0.X) / StepCount);
BitBtn1.Top := Round(Btn1LT0.Y + i * (Btn1LT.Y - Btn1LT0.Y) / StepCount);
BitBtn2.Left := Round(Btn2LT0.X + i * (Btn2LT.X - Btn2LT0.X) / StepCount);
BitBtn2.Top := Round(Btn2LT0.Y + i * (Btn2LT.Y - Btn2LT0.Y) / StepCount);
BitBtn3.Left := Round(Btn3LT0.X + i * (Btn3LT.X - Btn3LT0.X) / StepCount);
BitBtn3.Top := Round(Btn3LT0.Y + i * (Btn3LT.Y - Btn3LT0.Y) / StepCount);
BitBtn4.Left := Round(Btn4LT0.X + i * (Btn4LT.X - Btn4LT0.X) / StepCount);
BitBtn4.Top := Round(Btn4LT0.Y + i * (Btn4LT.Y - Btn4LT0.Y) / StepCount);
BitBtn5.Left := Round(Btn5LT0.X + i * (Btn5LT.X - Btn5LT0.X) / StepCount);
BitBtn5.Top := Round(Btn5LT0.Y + i * (Btn5LT.Y - Btn5LT0.Y) / StepCount);
Application.ProcessMessages;
end;
Form2.Label1.Caption:='';
Form2.Panel1.Caption:='';
GroupBox7.Visible:=true;
GroupBox8.Visible:=true;
Table1.Filter:='Klas='''+'myz''';
Table1.Filtered:=True;
end;
procedure TForm2.BitBtn3Click(Sender: TObject);
begin
// находим начальные положения кнопок
Btn1LT0.X := BitBtn1.Left; Btn1LT0.Y := BitBtn1.Top;
Btn2LT0.X := BitBtn2.Left; Btn2LT0.Y := BitBtn2.Top;
Btn3LT0.X := BitBtn3.Left; Btn3LT0.Y := BitBtn3.Top;
Btn4LT0.X := BitBtn4.Left; Btn4LT0.Y := BitBtn4.Top;
Btn5LT0.X := BitBtn5.Left; Btn5LT0.Y := BitBtn5.Top;
Btn1LT.X := 16; Btn1LT.Y := 50;
Btn2LT.X := 16; Btn2LT.Y := 150;
Btn3LT.X := 16; Btn3LT.Y := 250;
Btn4LT.X := 16; Btn4LT.Y := 350;
Btn5LT.X := 16; Btn5LT.Y := 450;
for i := 1 to StepCount do
begin
BitBtn1.Left := Round(Btn1LT0.X + i * (Btn1LT.X - Btn1LT0.X) / StepCount);
BitBtn1.Top := Round(Btn1LT0.Y + i * (Btn1LT.Y - Btn1LT0.Y) / StepCount);
BitBtn2.Left := Round(Btn2LT0.X + i * (Btn2LT.X - Btn2LT0.X) / StepCount);
BitBtn2.Top := Round(Btn2LT0.Y + i * (Btn2LT.Y - Btn2LT0.Y) / StepCount);
BitBtn3.Left := Round(Btn3LT0.X + i * (Btn3LT.X - Btn3LT0.X) / StepCount);
BitBtn3.Top := Round(Btn3LT0.Y + i * (Btn3LT.Y - Btn3LT0.Y) / StepCount);
BitBtn4.Left := Round(Btn4LT0.X + i * (Btn4LT.X - Btn4LT0.X) / StepCount);
BitBtn4.Top := Round(Btn4LT0.Y + i * (Btn4LT.Y - Btn4LT0.Y) / StepCount);
BitBtn5.Left := Round(Btn5LT0.X + i * (Btn5LT.X - Btn5LT0.X) / StepCount);
BitBtn5.Top := Round(Btn5LT0.Y + i * (Btn5LT.Y - Btn5LT0.Y) / StepCount);
Application.ProcessMessages;
end;
Form2.Label1.Caption:='';
Form2.Panel1.Caption:='';
GroupBox7.Visible:=true;
GroupBox8.Visible:=true;
Table1.Filter:='Klas='''+'game''';
Table1.Filtered:=True;
end;
procedure TForm2.BitBtn4Click(Sender: TObject);
begin
Btn1LT0.X := BitBtn1.Left; Btn1LT0.Y := BitBtn1.Top;
Btn2LT0.X := BitBtn2.Left; Btn2LT0.Y := BitBtn2.Top;
Btn3LT0.X := BitBtn3.Left; Btn3LT0.Y := BitBtn3.Top;
Btn4LT0.X := BitBtn4.Left; Btn4LT0.Y := BitBtn4.Top;
Btn5LT0.X := BitBtn5.Left; Btn5LT0.Y := BitBtn5.Top;
Btn1LT.X := 16; Btn1LT.Y := 50;
Btn2LT.X := 16; Btn2LT.Y := 150;
Btn3LT.X := 16; Btn3LT.Y := 250;
Btn4LT.X := 16; Btn4LT.Y := 350;
Btn5LT.X := 16; Btn5LT.Y := 450;
for i := 1 to StepCount do
begin
BitBtn1.Left := Round(Btn1LT0.X + i * (Btn1LT.X - Btn1LT0.X) / StepCount);
BitBtn1.Top := Round(Btn1LT0.Y + i * (Btn1LT.Y - Btn1LT0.Y) / StepCount);
BitBtn2.Left := Round(Btn2LT0.X + i * (Btn2LT.X - Btn2LT0.X) / StepCount);
BitBtn2.Top := Round(Btn2LT0.Y + i * (Btn2LT.Y - Btn2LT0.Y) / StepCount);
BitBtn3.Left := Round(Btn3LT0.X + i * (Btn3LT.X - Btn3LT0.X) / StepCount);
BitBtn3.Top := Round(Btn3LT0.Y + i * (Btn3LT.Y - Btn3LT0.Y) / StepCount);
BitBtn4.Left := Round(Btn4LT0.X + i * (Btn4LT.X - Btn4LT0.X) / StepCount);
BitBtn4.Top := Round(Btn4LT0.Y + i * (Btn4LT.Y - Btn4LT0.Y) / StepCount);
BitBtn5.Left := Round(Btn5LT0.X + i * (Btn5LT.X - Btn5LT0.X) / StepCount);
BitBtn5.Top := Round(Btn5LT0.Y + i * (Btn5LT.Y - Btn5LT0.Y) / StepCount);
Application.ProcessMessages;
end;
Form2.Label1.Caption:='';
Form2.Panel1.Caption:='';
GroupBox7.Visible:=true;
GroupBox8.Visible:=true;
Table1.Filter:='Klas='''+'prog'';
Table1.Filtered:=True;
end;
end;
procedure TForm2.BitBtn5Click(Sender: TObject);
begin
Btn1LT0.X := BitBtn1.Left; Btn1LT0.Y := BitBtn1.Top;
Btn2LT0.X := BitBtn2.Left; Btn2LT0.Y := BitBtn2.Top;
Btn3LT0.X := BitBtn3.Left; Btn3LT0.Y := BitBtn3.Top;
Btn4LT0.X := BitBtn4.Left; Btn4LT0.Y := BitBtn4.Top;
Btn5LT0.X := BitBtn5.Left; Btn5LT0.Y := BitBtn5.Top;
Btn1LT.X := 16; Btn1LT.Y := 50;
Btn2LT.X := 16; Btn2LT.Y := 150;
Btn3LT.X := 16; Btn3LT.Y := 250;
Btn4LT.X := 16; Btn4LT.Y := 350;
Btn5LT.X := 16; Btn5LT.Y := 450;
for i := 1 to StepCount do
begin
BitBtn1.Left := Round(Btn1LT0.X + i * (Btn1LT.X - Btn1LT0.X) / StepCount);
BitBtn1.Top := Round(Btn1LT0.Y + i * (Btn1LT.Y - Btn1LT0.Y) / StepCount);
BitBtn2.Left := Round(Btn2LT0.X + i * (Btn2LT.X - Btn2LT0.X) / StepCount);
BitBtn2.Top := Round(Btn2LT0.Y + i * (Btn2LT.Y - Btn2LT0.Y) / StepCount);
BitBtn3.Left := Round(Btn3LT0.X + i * (Btn3LT.X - Btn3LT0.X) / StepCount);
BitBtn3.Top := Round(Btn3LT0.Y + i * (Btn3LT.Y - Btn3LT0.Y) / StepCount);
BitBtn4.Left := Round(Btn4LT0.X + i * (Btn4LT.X - Btn4LT0.X) / StepCount);
BitBtn4.Top := Round(Btn4LT0.Y + i * (Btn4LT.Y - Btn4LT0.Y) / StepCount);
BitBtn5.Left := Round(Btn5LT0.X + i * (Btn5LT.X - Btn5LT0.X) / StepCount);
BitBtn5.Top := Round(Btn5LT0.Y + i * (Btn5LT.Y - Btn5LT0.Y) / StepCount);
Application.ProcessMessages;
end;
Form2.Label1.Caption:='';
Form2.Panel1.Caption:='';
GroupBox7.Visible:=true;
GroupBox8.Visible:=true;
Table1.Filter:='Klas='''+'knigi''';
Table1.Filtered:=True;
end;
end;а как проще написать чтоб работало? Данным способом работает, но тут одно и тоже повторяется ![]() Последний раз редактировалось segas, 22.05.2009 в 22:25. |
|
#9
|
||||
|
||||
|
Кто нибудь подскажет?
|
|
#10
|
|||
|
|||
|
Я же вам показывала (в посте #5), как сделать, чтобы код не дублировался. Назначьте всем пяти кнопкам один и тот же обработчик события OnClick, в который вставьте эти действия, касательно перемещения кнопок. Ну, и с фильтром можно несложно разобраться, анализируя с помощью параметра Sender, какая именно кнопка вызвала событие. Зайдите в Object Inspector, найдите в свойствах ваших кнопок (BitBtn) свойство Tag. Первой кнопке задайте Tag=1, второй кнопке — Tag=2, третьей — Tag=3, четвертой — Tag=4, пятой — Tag=5. Теперь в обработчике события OnClick можно по этому свойству опознать, какая из кнопок вызвала событие, и соответствующим образом изменить фильтр.
Код:
procedure TForm1.AnyBitBtn1Click(Sender: TObject);
const
StepCount = 200; // число шажков от начального к конечному положению
var
i: Integer;
Btn1LT0, Btn2LT0, Btn3LT0, Btn4LT0, Btn5LT0: TPoint;
Btn1LT, Btn2LT, Btn3LT, Btn4LT, Btn5LT: TPoint;
begin
// находим начальные положения кнопок
Btn1LT0.X := BitBtn1.Left; Btn1LT0.Y := BitBtn1.Top;
Btn2LT0.X := BitBtn2.Left; Btn2LT0.Y := BitBtn2.Top;
Btn3LT0.X := BitBtn3.Left; Btn3LT0.Y := BitBtn3.Top;
Btn4LT0.X := BitBtn4.Left; Btn4LT0.Y := BitBtn4.Top;
Btn5LT0.X := BitBtn5.Left; Btn5LT0.Y := BitBtn5.Top;
// задаём конечные положения кнопок
Btn1LT.X := 400; Btn1LT.Y := 80;
Btn2LT.X := 400; Btn2LT.Y := 112;
Btn3LT.X := 400; Btn3LT.Y := 144;
Btn4LT.X := 400; Btn4LT.Y := 176;
Btn5LT.X := 400; Btn5LT.Y := 208;
// поехали...
for i := 1 to StepCount do
begin
BitBtn1.Left := Round(Btn1LT0.X + i * (Btn1LT.X - Btn1LT0.X) / StepCount);
BitBtn1.Top := Round(Btn1LT0.Y + i * (Btn1LT.Y - Btn1LT0.Y) / StepCount);
BitBtn2.Left := Round(Btn2LT0.X + i * (Btn2LT.X - Btn2LT0.X) / StepCount);
BitBtn2.Top := Round(Btn2LT0.Y + i * (Btn2LT.Y - Btn2LT0.Y) / StepCount);
BitBtn3.Left := Round(Btn3LT0.X + i * (Btn3LT.X - Btn3LT0.X) / StepCount);
BitBtn3.Top := Round(Btn3LT0.Y + i * (Btn3LT.Y - Btn3LT0.Y) / StepCount);
BitBtn4.Left := Round(Btn4LT0.X + i * (Btn4LT.X - Btn4LT0.X) / StepCount);
BitBtn4.Top := Round(Btn4LT0.Y + i * (Btn4LT.Y - Btn4LT0.Y) / StepCount);
BitBtn5.Left := Round(Btn5LT0.X + i * (Btn5LT.X - Btn5LT0.X) / StepCount);
BitBtn5.Top := Round(Btn5LT0.Y + i * (Btn5LT.Y - Btn5LT0.Y) / StepCount);
end;
Form2.Label1.Caption := '';
Form2.Panel1.Caption := '';
GroupBox7.Visible := True;
GroupBox8.Visible := True;
case (Sender as TBitBtn).Tag of
1: Table1.Filter := 'Klas=''' + 'film''';
2: Table1.Filter := 'Klas=''' + 'myz''';
3: Table1.Filter := 'Klas=''' + 'game''';
4: Table1.Filter := 'Klas=''' + 'prog''';
else Table1.Filter := 'Klas=''' + 'knigi''';
end;
Table1.Filtered := True;
end;Последний раз редактировалось Nyctos Kasignete, 24.05.2009 в 19:01. |