[Delphi] Problem z przekazywaniem wartości

0

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?

0

Przekazuj zmienne przez funkcje.

--
Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

0

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
0

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.

0

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  
0

[cya]
JONIU

Czekam na odpowiedź

CO ŚPISZ.

0

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

0

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.

0

[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]

0

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ę)

0

;-(
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. "
0

[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]

0

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?

0

:-(
Spróbuj zadeklarować zmienną publiczną w:
public

private
{ Private declarations }

public
O TU

{ Public declarations }
end;

JacekS :-|

0

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!

1 użytkowników online, w tym zalogowanych: 0, gości: 1