Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];

Вниз

Помогите с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
14-49256
DOC97
2002-12-26 01:03
2003.01.16
15 WMZ - за прогу


3-48939
Lexa
2002-12-22 04:33
2003.01.16
DBGrid


14-49268
race1
2002-12-27 10:46
2003.01.16
косяк


4-49375
race1
2002-11-28 06:34
2003.01.16
api


3-48955
BlueDragon
2002-12-19 14:56
2003.01.16
Проблемы с BDE из Windows2000





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский