|
|
Регистрация | << Правила форума >> | 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. |