![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
поиск и работа с формой [D7, WinXP]
demek © (2005-08-25 16:08:00)Здрасте Уважаемые!
Есть приложение с немодальными формами, на которых расположены мемо, когда происходит определенное событие приложение открывает одну форму и пишет информацию в мемо. при следующем (другом) событие может открыться другая форма и т.д. а если событе повторяется то программа проверяет открыта ли уже форма и если она открыта то должна добовлять информацию в ее мемо. проверка открытого окна есть, а вот как добавить информацию в мемо я не знаю... подскажите пожалуйста.
demek (2005-08-29 10:03:00) [1]Больое спасибо Digitman. Очень признателен за помощь. Приношу свои извенения за [14].
только отда ошибочка в коде
for i:= 0 to Screen.Forms.Count - 1 do -> for i:= 0 to Screen.FormСount - 1 do
Спасибо!!!!!
Digitman (2005-08-26 18:37:00) [2]//цикл по всем существующим объектам-формам приложения
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;
Digitman (2005-08-26 18:29:00) [3]
> demek (26.08.05 15:25) [18]
что ж ты к "гениям" не причислил Alexander Panov © (26.08.05 13:50) [15] ?
Он же старался, время свое потратил, код тебе привел, а ты даже не сподобился проанализировать его на предмет готового решения своей проблемы !..
demek (2005-08-26 15:25:00) [4]Уважаемые, ну подскажите как сделать. Весь день бьюсь...
demek (2005-08-26 14:36:00) [5]Я приношу свои извенения, но похоже мы изночально друг друга не поняли или я не так выразился.
Есть главная форма - MainForm, и форма - Form1 с Memo. При каком то событие происходит открытие формы Form1 с заголовком Событие1 и в Memo добовляется текст - Произошло Событие1. При следующем событие (другом) - открывается форма Form1 с заголовком Событие2 и текстом в Memo Произошло Событие2 и т.д. А вот если события повторяются, например Событие1 то идет обращение к уже открытой форме с заголовком Событие1 и в его Memo должен добавиться еще текст, например Сново Произошло Событие1 и т.д.
Leonid Troyanovsky (2005-08-26 14:01:00) [6]
> Alexander Panov © (26.08.05 13:50) [15]
> FormList := TStringList.Create;
У Screen и так есть список форм.
Т.е., ничего дополнительно и не требуется.
--
Regards, LVT.
Alexander Panov (2005-08-26 13:50:00) [7]Ну и запутано все у тебя.
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.
demek (2005-08-26 12:50:00) [8]Спасибо большое за "помощь", особенно таким гениям как Leonid Troyanovsky и Digitman. очень помогли с решением проблемы.
Anatoly Podgoretsky (2005-08-26 12:42:00) [9]Form1 имеет неправильное значение, в первом случае правильно, поскольку даже и не используется.
Leonid Troyanovsky (2005-08-26 12:41:00) [10]
> demek (26.08.05 12:38) [11]
> от ошибки я избавился. посмотрите пожалуйста код, не пойму
> где ошибка, если я
У тебя много ошибок.
--
Regards, LVT.
demek (2005-08-26 12:38:00) [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);
Alexander Panov (2005-08-26 12:01:00) [12]demek (26.08.05 11:43) [9]
А что ты делаешь?
Код приводи.
Простой вывод в мемо не может привести к этой ошибке без специальных ихвращений.
demek (2005-08-26 11:43:00) [13]форма открыта и видима, но может быть на заднем плане...
tesseract (2005-08-25 18:14:00) [14]>> не работает, говорит "Cannot focus a disabled or invisible window"
Форма точно открыта и видима?
Digitman (2005-08-25 17:14:00) [15]
> demek (25.08.05 16:32) [6]
КТО говорит ?
demek (2005-08-25 16:32:00) [16]не работает, говорит "Cannot focus a disabled or invisible window"
Alexander Panov (2005-08-25 16:24:00) [17]demek (25.08.05 16:20) [3]
понял! а если открывается одна и та же форма но с разными названиями (caption), то как быть в этом случае?
У формы есть название(имя) - это Form. Name, а есть заголовок - Form. Caption. К форме обычно обращаются по имени.
Юрий Зотов (2005-08-25 16:23:00) [18]> demek (25.08.05 16:20) [3]
Точно так же. Caption формы здесь ни при чем, оно к имени формы не имеет никакого отношения.
demek (2005-08-25 16:20:00) [19]понял! а если открывается одна и та же форма но с разными названиями (caption), то как быть в этом случае?
Юрий Зотов (2005-08-25 16:18:00) [20]ИмяФормы.ИмяМемо.lines.Text := 'Это заменяющий текст.';
ИмяФормы.ИмяМемо.lines.Add('А вот это - добавляемый текст.');
:о)