Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
4-1124080356
leonidus
2005-08-15 08:32
2005.10.09
В чем разнича между GetAsyncKeyState и GetKeyState?


14-1126952615
Piter
2005-09-17 14:23
2005.10.09
Ничего себе парень отжигает...


1-1127079332
antonioxxx
2005-09-19 01:35
2005.10.09
Регистрация DLL-библиотек


14-1126752415
vrem
2005-09-15 06:46
2005.10.09
Как на вас влияет пятно на солнце? :)


14-1126636393
syte_ser78
2005-09-13 22:33
2005.10.09
Зацените программу