Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.16;
Скачать: CL | DM;

Вниз

Помогите с RunTime!!!!!   Найти похожие ветки 

 
Fider ©   (2003-01-05 08:36) [0]

Приветик всем!!! Дела, короче, обстоят так: я создаю массив кнопок в RunTime примерно так:
procedure ShowButtons ;
var a: integer;
begin
ww := Form1.Image1.Width div 30;
hh := Form1.Image1.Height div 30;
for a:= 1 to ww*hh do
begin
if w < ww then
begin
buts[a]:=TBitBtn.Create(Form1);
buts[a].parent:=form1;
buts[a].Width:=30;
buts[a].Height:=30;
buts[a].Top:=30*h;
buts[a].Left:=30*w;
buts[a].Caption:=inttostr(Random(4) + 1);
w:= w + 1;
end;
if w = ww then
begin
buts[a]:=TBitBtn.Create(Form1);
buts[a].parent:=form1;
buts[a].Width:=30;
buts[a].Height:=30;
buts[a].Top:=30*h;
buts[a].Left:=30*w;
buts[a].Caption:=inttostr(Random(4) + 1);
w := 0;
h := h + 1;
end;
end;

end;


и понимаю, что толку-то от этих кнопок!!!Как на каждую из них добавить по продуре? Помогите, plzzz!!!


 
Song ©   (2003-01-05 08:43) [1]

А зачем процедуру на каждую? Добавляю всегда одну и ту же Buts[a].onClick:=MyClickProc;
А в процедуре MyClickProc вычисляйте какая именно кнопка была нажата по Sender"у.


 
Fider ©   (2003-01-05 08:50) [2]

Неужели кто-то так быстро ответил!!!.... Спасибо, конечно, но вот, что вылазит при запуске:
[Error] Unit1.pas(74): Incompatible types: "method pointer and regular procedure"


 
Song ©   (2003-01-05 08:59) [3]

Надо чтобы процедура MyClickProc была методом класса т.е. вы должны описать в классе и кроме того тип её должен быть TNotifyEvent (нажмите двойной клик на событии в ИО чтобы посмотреть в какой форме должны быть параметры у этой процедуры).


 
Viktor Kushnir ©   (2003-01-05 09:01) [4]

А ну наверное так:

...
Procedure Btnc(Sender :TObject); //метод должен принадлежать классу!
...

Procedure TMainForm.Btnc(Sender :TObjcet);
Begin
BEEP;
End;

...
//И где-то в твоей процедуре...
buts[a].onclick := Btnc;
...


 
VAleksey ©   (2003-01-05 09:02) [5]


> нажмите двойной клик на событии в ИО чтобы посмотреть в
> какой форме должны быть параметры у этой процедуры

и переделай ее под нужную тебе


 
Fider ©   (2003-01-05 10:33) [6]

Можете называть меня ламером, но у меня не выходит. Че куда ни напиши, все время какие- нибудь ошибки, может есть у кого готовый пример, так поделитесь, можно мылом, тогда может и дойдет, наконец... Спасибо тем кто уже ответил, и пжалста тем, кто собирается!!!


 
REA ©   (2003-01-05 11:01) [7]

Удалено модератором
Примечание: OffTopic


 
Наталия ©   (2003-01-05 11:06) [8]

на delphi.vitpc.com есть статья в разделе "Hellow,world" - "Жизнь и смерть в режиме runtime" - вроде бы. Почитай, многие вопросы отпадут.


 
DJ_Sedoy ©   (2003-01-05 11:30) [9]

Еще раз: это должен быть медот класса!

Аналогичный мой вопрос тут был дней 5 назад. Итак (Как самый простой пример):

TForm1 = class (Tobject)
.............
MyProc(Sender: TObject);
.............
end;

...............

В самой процедуре:
buts[a].onClick:=MyProc;

И далее в программе:

procedure TForm1.MyProc(Sender: TObject);
Begin
САМА ПРОЦЕДУРА, ПРИ ТОМ МОЖНО УЧЕСТЬ, ЧТО
if Sender = buts[1] then ShowMessage("Button 1 pressed");
И ТАК ДАЛЕЕ
end;

Именно в таком случае мы сделали эту процедуру методом класса.


 
NikolaB   (2003-01-05 12:54) [10]

> if Sender = buts[1] then ShowMessage("Button 1 pressed");
Mojno sdelat luchse:
In Create:
buts[a].Tag:=a;
In Procedure:
Case tButton(Sender).Tag of
...


 
Tano ©   (2003-01-05 21:26) [11]

Мой дежурный шаблон создания кнопки в RT с реакцией на вход/выход мыши. Тут полностью описано как привязать OnClick (или любой другой). Одна или несколько кнопок - неважно.

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type

//ПИШЕМ ПОТОМОК TButton (или чего там еще надо)...
TNewButton = class(TButton)
procedure BMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure BMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
end;


TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure New_FlashButtonClick(Sender: TObject); //сами пишем это
private
{ Private declarations }
public
FlashButton :TNewButton; //кнопка - просто переменная
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TNewButton.BMouseEnter(var Message: TMessage);
begin
//мыша заехала - меняем свойства кнопки
//Font.Color:=clLime; - ЦВЕТ У TButton НЕ МЕНЯЕТСЯ (странно, но только сейчас заметил :-(
Font.Style:=[fsBold, fsUnderline];
SetFocus; //- ставим фокус на кнопку - необязательно
end;

procedure TNewButton.BMouseLeave(var Message: TMessage);
begin
//мыша убежала - меняем свойства кнопки
//Font.Color:=clBlack;
Font.Style:=[];
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
//создание кнопки на форме в Run-Time
FlashButton:=TNewButton.Create(self); //создать
FlashButton.Parent:=self; //указать родителем ЭТУ форму
with FlashButton do
begin
Name:="FlashButton"; //!!! = названию переменной !!!
//инициализация полей - "соль по вкусу"
Caption:="Моргушка";
Left:=10;
Top:=10;
Width:=75;
Height:=25;
Cursor:=crHandPoint;
OnClick:=New_FlashButtonClick;
//Подсказка: я кладу предок элемента (TButton) на
//форму, выравниваю, подписываю, и т.д. и т.п.,
//затем открываю форму как текст, нахожу блок свойств, у нас - строки:
//
//object Button1: TButton
// Left = 32
// Top = 20
// Width = 75
// Height = 25
// Caption = "Button1"
// TabOrder = 0
//end
//
//всё это копирую в "соль по вкусу" и дописываю ":=" и ";"
// -> получаю гарантированное создание в Run-Time того, что видел
//на форме при дизайне.
end;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
//сам породил - сам и убивай!
FlashButton.Free;
end;

procedure TForm2.New_FlashButtonClick(Sender: TObject);
begin
Caption:=DateTimeToStr(Now); //демонстрация
end;

end.

Рекомендую (раз уж самому приходиться конструировать) работай с TPanel,
у нее возможностей по оформлению больше, а работать как кнопка она вполне способна


Удачи!


 
Tano ©   (2003-01-05 21:28) [12]

Чуток избыточно, но вырезать лишнее проще ;-)


 
Fider ©   (2003-01-06 10:36) [13]

УРА!!!!!! Люди, всем спасибо, с Рождеством, с Новым годом вас всех!!!!!!!



Страницы: 1 вся ветка

Текущий архив: 2003.01.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.02 c
14-49294
saxon
2002-12-26 17:38
2003.01.16
Что понимается под словом


14-49237
Driverrr
2002-12-26 16:27
2003.01.16
NTFS


1-49146
БурЖуй
2003-01-05 14:30
2003.01.16
Tthread, как и почему?


1-49081
Beglec
2003-01-05 00:48
2003.01.16
Старый и замученный вопрос


14-49311
Thomas Brandon
2002-12-27 19:34
2003.01.16
Какую из СУБД выбрать: Yaffil, MS SQL или MySQL?