Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema al invocar componentes de otro form (https://www.clubdelphi.com/foros/showthread.php?t=85700)

danielmj 21-04-2014 10:11:13

Problema al invocar componentes de otro form
 
Hola, estoy teniendo un problema a la hora de hacer referencia al comboBox de un formulario desde otro formulario, me tiene descolocado por que haciendo la llamada por ejemplo del formulario "a cerca de..." funciona bien, pero me da error si llamo al componente antes citado de otro formulario. Pongo el código y lo explico mejor.

Código Delphi [-]
unit editor;
interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.ExtCtrls, ShellApi,
  Vcl.ComCtrls;

type
  TbEditor = class(TForm)
    menu: TMainMenu;
    Archivo1: TMenuItem;
    Guardar1: TMenuItem;
    Salir1: TMenuItem;
    Informacin1: TMenuItem;
    Acercade1: TMenuItem;
    Panel2: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Abrir1: TMenuItem;
    memo1: TRichEdit;
    procedure Salir1Click(Sender: TObject);
    procedure Guardar1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Abrir1Click(Sender: TObject);
    procedure Acercade1Click(Sender: TObject);
    procedure memo1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  bEditor: TbEditor;

implementation

{$R *.dfm}

uses BNote, about;


procedure TbEditor.Acercade1Click(Sender: TObject);
begin
  aboutFRM.ShowModal
end;

procedure TbEditor.Guardar1Click(Sender: TObject);
var
  listado: tStringList;

begin
  listado:= tStringList.Create;
  bNotas.lista.items.add(edit1.Text);
  if memo1.Text <> '' then
    begin
      bNotas.editor.Lines.Add((chr(13))+edit1.Text+(chr(13))+memo1.Text+
      chr(13)+'________________________________________'+(chr(13)));
    try
      listado.Add(edit1.Text);
      listado.SaveToFile('entradas.text');
    finally
      FreeAndNil(listado);
    end;
  end;
end;
...

//En las lineas de color rojo es donde se marca el/los errores:
{
[dcc64 Error] editor.pas(86): E2003 Undeclared identifier: 'lista'
[dcc64 Error] editor.pas(86): E2066 Missing operator or semicolon
[dcc64 Error] editor.pas(89): E2003 Undeclared identifier: 'editor'
[dcc64 Error] editor.pas(89): E2066 Missing operator or semicolon
[dcc64 Fatal Error] F2063 Could not compile used unit 'editor.pas'
}

La llamada la intento hacer desde el formulario "editor", por otra parte la unidad "bNote" contiene un formulario llamado "bNotas" y este a su vez un comboBox llamado "lista", al hacer clic sobre "guardar" del menú (del formulario editor), supuestamente realiza una llamada a la unidad bNote, a su formulario (bNotas) y a su control comboBox (lista).
De igual modo, se hace la llamada al formulario "acerca de...." que se encuentra dentro de la unidad "about" y en este caso no hay problema.

¿por qué si he declarado la unidad "bNote" delphi me tira un error diciendo que no está declarado el identificador "lista" cuando si está declarado en el uses
(
Código Delphi [-]
uses bNote, about
)?

No soy ningún experto en delphi, pero nunca he tenido problema para hacer llamadas a componentes de segundos formularios y me tiene descolocado. Lo curioso es que antes funcionaba, y el unico cambio que he realizado, ha sido implementar el código que ecfisa me sugirió en este otro hilo), pero tampoco tiene que ver una cosa con otra, así que no entiendo por que antes la llamada funcionaba y ahora no.

Saludos y gracias de antemano.

ecfisa 21-04-2014 10:54:34

Hola danielmj.

Con los errores que mostras no lo entiendo...

¿ No recibiste también el error Undeclared identifier: 'bNotas' ? De ser así, podría haber una confusión en el nombre del form. Revisa si el nombre del form no es "bNotes" o algo similar, a veces pasa...

Saludos :)

danielmj 21-04-2014 12:07:02

Hola ecfisa,

gracias por responder tan rapido, he hecho una captura de delphi para que veas que el nombre del formulario es "bnotas"



Realmente, no entiendo que pasa y este tipo de cosas me frustra bastante mas cuando no dejo de darle vueltas y no cosigo encontrar el error. Voy a probar el mismo codigo en lazarus, como en este si funcione y en delphi no, ya me volvere loco del todo.

Saludos y otra vez gracias.

danielmj 21-04-2014 12:34:11

Hola de nuevo, acabo de probar el mismo codigo en lazarus y funciona perfectamente, no entiendo nada.:confused:

Saludos.

nlsgarcia 21-04-2014 17:43:27

danielmj,

Cita:

Empezado por danielmj
...estoy teniendo un problema a la hora de hacer referencia al ComboBox de un formulario desde otro formulario...

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    MainMenu1: TMainMenu;
    Form21: TMenuItem;
    procedure Form21Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Uses Unit2;

procedure TForm1.Form21Click(Sender: TObject);
begin
   Unit2.Form2.Show;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Unit2.Form2.ComboBox1.Items.Add(Edit1.Text);
end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, adiciona Items en el ComboBox1 de Form2 en la unidad Unit2 desde Form1 en la Unidad Unit1, y muestra el formulario Form2, como se muestra en la imagen:



Espero sea útil :)

Nelson.

danielmj 22-04-2014 12:30:35

hola nelson,

ahora mismo estoy limpiando el pc de porqueria, y no puedo probar tu codigo, en cuanto lo haga te comento. Saludos y gracias por el interés.

danielmj 22-04-2014 14:55:44

Hola nlsgarcia, ya probe lo que me indicabas de preceder la llamada al componente con la unidad, y sigue sin funcionar. No sé que pasa.

En fin, gracias y saludos.

danielmj 22-04-2014 17:30:27

Hola, he probado a crear un proyecto nuevo desde 0, teniendo dos sesiones de delphi abiertas y simplemente, copiando y pegando de una a otra y resulta que una (llamemosle original) sigue con el mismo error y la otra teniendo los mismos formularios, unidades y código funciona sin errores. Ahora si que no entiendo nada.

En fin, ahora que no me da errores ya guarde una copia por si las moscas, aunque sigo sin entender por que siendo basicamente el mismo programa uno da error y el otro no.

Saludos.

nlsgarcia 22-04-2014 18:35:48

danielmj,

Cita:

Empezado por danielmj
...he probado a crear un proyecto nuevo desde 0, teniendo dos sesiones de Delphi abiertas y simplemente, copiando y pegando de una a otra y resulta que una (original) sigue con el mismo error y la otra teniendo los mismos formularios, unidades y código funciona sin errores...En fin, ahora que no me da errores...

Al parecer el problema estaba en los archivos de control de Delphi, sería bueno que crearas un proyecto de pruebas en el cual borraras todos los archivos (Del proyecto original) excepto los .dpr, .dfm y .pas y verificaras el funcionamiento del mismo, es muy probable que funcione correctamente.

Espero sea útil :)

Nelson.

danielmj 22-04-2014 21:40:47

Voy con ellos y comento. Gracias y saludos.


La franja horaria es GMT +2. Ahora son las 01:43:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi