Mam poważny problem.
Nie wiem jak to zrobić aby zmienna z jednej foramy znalazła sięna drugiej formie. np. poprzez kliknięcie na ListBoxie, tzn, forma z listboxa jest dynamicznie wywoływana z pierwszej formy, klikając na listboxie chcę aby wartość w którą kliknę była przekazywana do edita znajdującego się w formie1.
Najprosciej mozna zrobić to w ten sposób:
w zdarzeniu OnClick komponentu listBox wpisać:
Form1.Edit1.Text:=ListBox1.Items.Strings[ListBox.ItemIndex];
lecz ten zapis nie chce działać w bibliotece dll.
Jak przekazać taką wartość jeśli obydwie formy umieszczę w dll-ce?
Przekazuj zmienne przez funkcje.
--
Jest jeszcze jeden błąd ... :)
Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.
Sprawdź w ten sposób.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses
Unit1;
procedura bleble
var
a: integer;
begin
a:= Unit1.Form1.B;
end;
end.
JacekS
Kolego Dryobates.
Czy mógłbym Ci podesłać moje źródła z prostym przykładem (omawianym powyżej) a ty zobaczyłbyś o co w tym chodzi?
Niestety ale ja nie mogę się połapać, a poza tym nie bardzo wiem jak i gdzie miałbym umieścić funkcję zwracającą mi te wartości?
Przepraszam że tak z grubej rury walę, ale dzisiaj tak mnie łeb naparza że ledwo siedzęprzed kompem i nic nie mogę wymyślić a jest mi to pilnie potrzebne.
Wczoraj nie zbyt precyzyjnie to przedstawiłem gdyż spieszyłem się.
podam przykład i formy1 i formy2.
przekazywana wartość to wartość A: integer oczywiście w przykładzie.
1 FORMA
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure wprowadz;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A: integer;
implementation
{$R *.dfm}
procedure TForm1.wprowadz;
begin
A:=5;
end;
end.
2 FORMA
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure przypisz;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
Uses
Unit1;
procedure TForm2.przypisz;
var
B: integer;
begin
B:=Unit1.A;
end;
end.
Bardzo Proszę to źródło jest sprawdzone. Nie potrzeba żadnej funkcji.
W formie odczytującecej po Dyrektywie implementation deklarujemy USES UNIT1 ponieważ tak nazywa sie program obsługujący FORM1
W Procedurze PRZYPISZ przypisujemy wartość A FORM1 do wartości B FORM2 " B:=UNIT1.A;"
Czy to jasne ?
JacekS
[cya]
JONIU
Czekam na odpowiedź
CO ŚPISZ.
JackuS
Wszystko było by dobrze gdyby nie to że jednak w bibliotece taka operacja jest niedozwolona (chyba) bo u mnie wyrzuca znów błąd.
Próbowałem to trochę na wskaźnikach (ale nigdy wcześniej się tym tematem nie zajmowałem) i coś mi chyba nie wychodzi bo też mi wyrzuca błąd tylko o innym adresie. (chodzi o czytanie z miejsca w pamięci w obu przypadkach - tylko w pierwszym jest to adres 00000300 a w drugim - tym z wskaźnikami - 00000000)
(a tak na marginesie to rzeczywiście spałem bo do trzeciej jeszcze mnie łeb bolał)
[cya]
Ale dzięki za odpowiedź.
Jak by Ci jeszcze coś do głowy przyszło to daj znać.
Jeśli chcesz to mogę Ci wysłać prosty przykład biblioteki w którym przedstawię problem o którym tu jest mowa.
bo ja już powoli z tym problemem wymiękam i zaczynam wyglądać tak: ;p
Sprawdzałem to bez funkcji, tylko zwykłe wykorzystanie uses. Działa.
Sprawdź, czy tworzysz formy w odpowiednich miejscach. To najprawdopodobniej powoduje błąd.
--
Jest jeszcze jeden błąd ... :)
Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.
[cya]
Forma pierwsz czyli główna musi być aktywna.
Nie może być zamknięta.
Tylko pod takim warunkiem będzie to działało.
JacekS
[browar]
Dzięki wszystkim za podpowiedzi, teraz działa, ale pojawił się nowy problemik.
Jeżeli forma druga jest wywoływana przez formę 1 (po kliknięciu przyciku na formie1), a to właśnie w formie drugiej jest przypisanie Uses1.zmienna:='jakiś ciąg znaków';
to jak teraz wykryć zamknięcie formy 2 aby móc odświeżyć przypisanie:
Edit.Text := zmienna;
znajdujące sięna formie 1. [???]
Obie formy dalej znajdują się w bibliotece oczywiście.
(Pewnie trochę niezrozumiale piszę)
;-(
Jeszcze raz powwwoooliiiii.
Zadeklaruj w formie 1 Uses formy 2 i tą samą metodą możesz przenieść zmienną do formy 1.
Jeszcze to sprawdzę.
JacekS
[niewinnosc]
" Jak coś ma nie wyjść to i tak nie wyjdzie.
Chyba Murphi. "
[cya] [browar]
Oto kod sprawdzony i działający na 100%.
w Edit1 formy 1 wpisz cokolwiek,
otwórz okno 2 - w Edit1 okna 2 masz to co wpisałeś w oknie 1,
teraz wpisz do Edit1 formy2 coś innego i zamknij okno 2,
w Edit1 okna pierwszego pokazała się ta wartość z okna 1.
Czy o to ci chodziło.
Napisz do mnie i podaj swój e-mail to prześlę ci cały KOD.
[browar] [niewinnosc]
Jak coś nie działa to i tak nie będzie działało.
Chyba Murphi. "
A Oto KOD
Aplikacja
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
OKNO 1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a: string;
implementation
Uses
Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
a:=Edit1.Text;
form2.Edit1.Text:=form1.Edit1.Text;
form2.Show;
end;
end.
OKNO 2
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses
Unit1;
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
Edit1.Text:=Unit1.a;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Edit1.Text:=Form2.Edit1.Text;
close;
end;
end.
KONIEC
[browar] [browar]
Niestaty ale o ile w normalnym programie taki przykład jest w 100% poprawny o tyle w bibliotece nie chce działać przypisywanie własciwości komponentów z jednej formy do właściwości komponentów na drugiej formie.
Wyskakuje dalej błąd.
Chyba zrezygnujęz biblioteki i wymyslę jakiś inny myk, bo już nie wiem co z tym zrobić.
Samo przypisanie zmiennych Edit1.Text := unit1.a;
będzie działało a jak bym chciał z komponentu do komponentu to nie.
Dziewne ale jeśli ktoś kiedyś miał taki problem to niech napisze jak to obszedł.
Lub jeśli ktoś wie że muszę wyłączyć lub włączyć jakąś funkcję w kompilatorze to też niech da znać.
Dzięki wszystkim.
A tak w ogóle to czy nikt nie pisze bibliotek z formami?
:-(
Spróbuj zadeklarować zmienną publiczną w:
public
private
{ Private declarations }
public
O TU
{ Public declarations }
end;
JacekS :-|
Niestaty ale o ile w normalnym programie taki przykład jest w 100% poprawny o tyle w bibliotece nie chce działać przypisywanie własciwości komponentów z jednej formy do właściwości komponentów na drugiej formie.
Wyskakuje dalej błąd.
Chyba zrezygnujęz biblioteki i wymyslę jakiś inny myk, bo już nie wiem co z tym zrobić.
Samo przypisanie zmiennych Edit1.Text := unit1.a;
będzie działało a jak bym chciał z komponentu do komponentu to nie.
Dziewne ale jeśli ktoś kiedyś miał taki problem to niech napisze jak to obszedł.
Lub jeśli ktoś wie że muszę wyłączyć lub włączyć jakąś funkcję w kompilatorze to też niech da znać.Dzięki wszystkim.
A tak w ogóle to czy nikt nie pisze bibliotek z formami?
bo raczej forme umieszczona w bibliotece warto nie udsotepniac publicznie, a tylko wywolac funkcje, ktora wykona jej wywolanie i rozne inne operacje i tylko to funkcje udostepnic w bibliotece.
tak sadze!