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

Вниз

Как создать процедуру на кнопку, которой ещё нет....   Найти похожие ветки 

 
EugenCFG   (2002-08-20 11:11) [0]

В процессе выполнения программы я добавляю к MainMenu NewItem(Tmenuitem)... Кнопка добавлена... Теперь пользователь жмет на неё и должно произойти событие, например Label1.Caption:="Good";...

И похожий вопрос на эту же тему... есть PageControl, а на нем TabSheet1. Теперь пользователь создает ещё 1 TabSheet... причём c RichEdit... Теперь при нажатии Enter определенный текст должен появиться в новом RichEdit... Вопрос как мне все эти имена просчитать??? Как на них ссылаться ведь пользователь может создать несколько десятков таких TabSheet(ов)


Кто ответит БОЛЬШОЕ СПАСИБО!!!!!!! Потому что я уже не могу решить эту проблему несколько недель...


 
Skier ©   (2002-08-20 11:51) [1]

>EugenCFG

Примерно так :


TForm1 = class(TForm)
Label1: TLabel;
MainMenu: TMainMenu;
private
procedure MenuItemClick(Sender : TObject);
end; //TForm1

procedure TForm1.MenuItemClick(Sender: TObject);
begin
Label1.Caption:="Good";
//and your extra code goes here...
end;



Создание :


var
ANewMenuItem : TMenuItem;
begin
ANewMenuItem := TMenuItem.Create(MainMenu);
ANewMenuItem.Caption := "New menu item";
ANewMenuItem.OnClick := MenuItemClick; //твоё событие...
MainMenu.Items.Add(ANewMenuItem);
//..................
end;


 
EugenCFG   (2002-08-20 12:22) [2]

Спасибо!

А на второй вопрос вы не знаете ответа???


 
Skier ©   (2002-08-20 12:24) [3]

>EugenCFG

> А на второй вопрос вы не знаете ответа???

Не очень я понял проблему.
Расскажи по-подробней или по-проще :)


 
EugenCFG   (2002-08-20 12:52) [4]

хорошо....

Вот у меня в PageControl есть одна закладка.... на ней я разместил RichEdit... Далее.. Вне Page Control находится Edit... я написал в нем текст нажал отправить и текст отображается в Richedit1 ... ВОТ! Теперь пользователь создает как бы новый сеанс : добавляется новая закладка и на нем RichEdit2 (имя не обязательно такое...)... ну так вот создать то я наверное создам (программно... ) а вот текст отсылать не смогу, потому что не знаю толком не имени, ничего...

Может проблема то параллельная с MainMenu кстати... Как вы мне показали всё работает... но когда я более 1 сделаю NewItem пытаюсь снять их caption а не получается... ошибку выдает...хотя изначально указал... здесь я думаю начать работать с файлами... в кот. я буду фиксировать добавленные кнопки и их свойства.. может быть также стоит поступить и с закладками....

Не знаю... если вы поняли чё нить... из этого, то я буду рад..


 
Skier ©   (2002-08-20 13:00) [5]

>EugenCFG

> ...не знаю толком не имени, ничего...


А зачем имя ? У тебя же в этом случае будет указатель на
созданный RichEdit, т.е.
ARichEdit := TRichEdit.Create(...);
и здесь ты уже имеешь указатель на объект ARichEdit,
так что я не совсем понял зачем имя.


> ...NewItem пытаюсь снять их caption а не получается


Покажи как пытаешься...


 
EugenCFG   (2002-08-20 13:10) [6]

procedure TForm1.MenuItemClick(Sender: TObject);
var MenuItem : TMenuItem;
begin
Label1.Caption:=MenuItem.Caption



я добавляю следующим образом...
RichEdit1.Lines.Add(Msg);
Надо же не забывать про все закладки... пользователь может их переключать... и только в зависимости от выбранной закладки добавляется текст в тот или иной RichEdit....
Не пойму как это сделать...


 
Skier ©   (2002-08-20 13:15) [7]

>EugenCFG


procedure TForm1.MenuItemClick(Sender: TObject);
begin
//......................
if Sender is TMenuItem then
Label1.Caption:=TMenuItem(Sender).Caption
//......................



> Не пойму как это сделать...


RichEdit на закладке только один ?


 
EugenCFG   (2002-08-20 13:32) [8]

на закладке да...
кол-во закладок = кол-во Ричев...


 
Skier ©   (2002-08-20 13:42) [9]

>EugenCFG

>
> кол-во закладок = кол-во Ричев...


Тогда примерно так :


procedure TForm1.Button2Click(Sender: TObject);

function GetActiveRichEdit(const APageControl : TPageControl) :
TRichEdit;
var
ii : Integer;
begin
Result := nil;
if (APageControl = nil) or
(APageControl.PageCount <= 0) then Exit;
with APageControl.ActivePage do begin
for ii := 0 to ControlCount - 1 do begin
if Controls[ii] is TRichEdit then begin
Result := TRichEdit(Controls[ii]);
Exit;
end; //for
end; //for
end; //with
end; //GetActiveRichEdit

procedure SendMsgToActiveRichEdit(const APageControl : TPageControl;
const AMsgText : String);
var
ARichEdit : TRichEdit;
begin
if AMsgText = EmptyStr then Exit;
ARichEdit := GetActiveRichEdit(APageControl);
if ARichEdit <> nil then begin
ARichEdit.Lines.Add(AMsgText);
end; //if
end; //SendMsgToActiveRichEdit

begin
SendMsgToActiveRichEdit(PageControl1, "Hello, world !");
end;


 
EugenCFG   (2002-08-20 13:47) [10]

Блин, да вы гений...!!!!!!!
за 10 мин состряпать...
Большое спасибо вам...!!!!!
Буду пробовать...

Я тут не совсем понял участок кода... Поясните, если вам не трудно....
if Sender is TMenuItem then //Sender меня смущает.... Это показывает как бы активный итем???? или нет??



 
Skier ©   (2002-08-20 13:53) [11]

>EugenCFG
Если просто, то : Sender - это тот Item, на который ты кликнул



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

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

Наверх




Память: 0.49 MB
Время: 0.022 c
1-3467
vitnt2000
2002-08-20 07:21
2002.09.02
Как программно заставить выпасть DateTimePicker?


7-3636
Voland_s
2002-06-20 17:48
2002.09.02
Запуск программы на удаленной машине с правами администратора


4-3692
v0id
2002-06-27 19:24
2002.09.02
Защита проги от Read/WriteProcessMemory


14-3569
Бунтовщик
2002-08-05 20:42
2002.09.02
А можно ли успеть за тех прогрессом?


1-3481
GreatQuaker
2002-08-21 10:46
2002.09.02
Многостраничный Hint для программы в Трее