Текущий архив: 2005.10.09;
Скачать: CL | DM;
Вниз
поиск и работа с формой Найти похожие ветки
← →
demek (2005-08-25 16:08) [0]Здрасте Уважаемые!
Есть приложение с немодальными формами, на которых расположены мемо, когда происходит определенное событие приложение открывает одну форму и пишет информацию в мемо. при следующем (другом) событие может открыться другая форма и т.д. а если событе повторяется то программа проверяет открыта ли уже форма и если она открыта то должна добовлять информацию в ее мемо. проверка открытого окна есть, а вот как добавить информацию в мемо я не знаю... подскажите пожалуйста.
← →
Alexander Panov © (2005-08-25 16:14) [1]ИмяФормы.ИмяМемо.lines.Text := "Это добавляемый текст.";
← →
Юрий Зотов © (2005-08-25 16:18) [2]ИмяФормы.ИмяМемо.lines.Text := "Это заменяющий текст.";
ИмяФормы.ИмяМемо.lines.Add("А вот это - добавляемый текст.");
:о)
← →
demek (2005-08-25 16:20) [3]понял! а если открывается одна и та же форма но с разными названиями (caption), то как быть в этом случае?
← →
Юрий Зотов © (2005-08-25 16:23) [4]> demek (25.08.05 16:20) [3]
Точно так же. Caption формы здесь ни при чем, оно к имени формы не имеет никакого отношения.
← →
Alexander Panov © (2005-08-25 16:24) [5]demek (25.08.05 16:20) [3]
понял! а если открывается одна и та же форма но с разными названиями (caption), то как быть в этом случае?
У формы есть название(имя) - это Form.Name, а есть заголовок - Form.Caption. К форме обычно обращаются по имени.
← →
demek (2005-08-25 16:32) [6]не работает, говорит "Cannot focus a disabled or invisible window"
← →
Digitman © (2005-08-25 17:14) [7]
> demek (25.08.05 16:32) [6]
КТО говорит ?
← →
tesseract © (2005-08-25 18:14) [8]>> не работает, говорит "Cannot focus a disabled or invisible window"
Форма точно открыта и видима?
← →
demek (2005-08-26 11:43) [9]форма открыта и видима, но может быть на заднем плане...
← →
Alexander Panov © (2005-08-26 12:01) [10]demek (26.08.05 11:43) [9]
А что ты делаешь?
Код приводи.
Простой вывод в мемо не может привести к этой ошибке без специальных ихвращений.
← →
demek (2005-08-26 12:38) [11]от ошибки я избавился. посмотрите пожалуйста код, не пойму где ошибка, если я создаю форму то текст вставляется, а если делаю добовление то не вставляется...
if FindWindow(0, "<->Окно1")=0 then
begin
with TForm1.Create(Application) do
begin
Caption:="<->Окно1";
SendString(msgchat, False);
Show;
end;
end
else Form1.SendString(msgchat, False);
end;
SendString процедура формы Form1 - procedure SendString(const S: string; const You: Boolean);
← →
Leonid Troyanovsky © (2005-08-26 12:41) [12]
> demek (26.08.05 12:38) [11]
> от ошибки я избавился. посмотрите пожалуйста код, не пойму
> где ошибка, если я
У тебя много ошибок.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2005-08-26 12:42) [13]Form1 имеет неправильное значение, в первом случае правильно, поскольку даже и не используется.
← →
demek (2005-08-26 12:50) [14]Спасибо большое за "помощь", особенно таким гениям как Leonid Troyanovsky и Digitman. очень помогли с решением проблемы.
← →
Alexander Panov © (2005-08-26 13:50) [15]Ну и запутано все у тебя.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
FormList: TStringList;
implementation
{$R *.dfm}
function OpenForm(const aName: String): TForm;
var
n: Integer;
Form: TForm;
Memo: TMemo;
begin
n := FormList.IndexOf(aName);
if n=-1 then
begin
Form := TForm.Create(nil);
Form.Name := aName;
Memo := TMemo.Create(Form);
Memo.Name := "Memo"+aName;
Memo.Align := alClient;
Memo.Parent := Form;
Form.OnClose := Form1.FormClose;
Memo.Lines.Text := "Welcome!";
Result := Form;
FormList.AddObject(aName,Form);
end
else
begin
Form := TForm(FormList.Objects[n]);
Result := Form;
end;
end;
procedure CloseForm(const aName: String);
var
n: Integer;
begin
n := FormList.IndexOf(aName);
TForm(FormList.Objects[n]).Release;
FormList.Delete(n);
end;
procedure FormSendText(const aName,Text: String);
var
Form: TForm;
Memo: Tmemo;
begin
Form := OpenForm(aName);
Memo := TMemo(Form.FindComponent("Memo"+aName));
Memo.Lines.Add(Text);
Form.Show;
Form.BringToFront;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FormList := TStringList.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Sender=Application.MainForm then
begin
try
while FormList.Count>0 do
begin
TForm(FormList.Objects[0]).Release;
FormList.Delete(0);
end;
finally
FormList.Free;
end;
Exit;
end;
CloseForm(TForm(Sender).Name);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FormSendText("Test1","Hello");
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FormSendText("Test2","Hello");
end;
end.
← →
Leonid Troyanovsky © (2005-08-26 14:01) [16]
> Alexander Panov © (26.08.05 13:50) [15]
> FormList := TStringList.Create;
У Screen и так есть список форм.
Т.е., ничего дополнительно и не требуется.
--
Regards, LVT.
← →
demek (2005-08-26 14:36) [17]Я приношу свои извенения, но похоже мы изночально друг друга не поняли или я не так выразился.
Есть главная форма - MainForm, и форма - Form1 с Memo. При каком то событие происходит открытие формы Form1 с заголовком Событие1 и в Memo добовляется текст - Произошло Событие1. При следующем событие (другом) - открывается форма Form1 с заголовком Событие2 и текстом в Memo Произошло Событие2 и т.д. А вот если события повторяются, например Событие1 то идет обращение к уже открытой форме с заголовком Событие1 и в его Memo должен добавиться еще текст, например Сново Произошло Событие1 и т.д.
← →
demek (2005-08-26 15:25) [18]Уважаемые, ну подскажите как сделать. Весь день бьюсь...
← →
Digitman © (2005-08-26 18:29) [19]
> demek (26.08.05 15:25) [18]
что ж ты к "гениям" не причислил Alexander Panov © (26.08.05 13:50) [15] ?
Он же старался, время свое потратил, код тебе привел, а ты даже не сподобился проанализировать его на предмет готового решения своей проблемы !..
← →
Digitman © (2005-08-26 18:37) [20]//цикл по всем существующим объектам-формам приложения
for i:= 0 to Screen.Forms.Count - 1 do
//если объект-форма есть объект класса TForm1
if Screen.Forms[i] is TForm1 then
with TForm1(Screen.Forms[i]) do
//если подпись этой формы такая-то
if Caption = "Событие1" then
begin
//добавить в Memo-список строку с таким-то текстом
Memo.Lines.Add("Текст");
//прервать цикл
Break;
end;
← →
demek (2005-08-29 10:03) [21]Больое спасибо Digitman. Очень признателен за помощь. Приношу свои извенения за [14].
только отда ошибочка в коде
for i:= 0 to Screen.Forms.Count - 1 do -> for i:= 0 to Screen.FormСount - 1 do
Спасибо!!!!!
Страницы: 1 вся ветка
Текущий архив: 2005.10.09;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.055 c