Předmět Autor Datum
Začni nejprve psaním S a Z. V tomto příkladu vidím absolutní prdlajs. BTW proměnná a zmizí po opuště…
Filuta 10.08.2012 13:49
Filuta
No. Vytvořím novy projekt, do form1 vložím edit Vytvářím Thread přes New Items – ThreadObject Do For…
Mireček 10.08.2012 18:30
Mireček
Vzhladom na chybovu hlasku Undeclared identifier: 'Form1' by som povedal ze v tom unit2.pas musis na…
MM.. 10.08.2012 18:33
MM..
Treba pridať Unit, kde sa nachádza Form1 - u Teba zrejme Unit1... Pochopiteľne ,ak chceš odkazovať n…
pme 10.08.2012 19:02
pme
No když odeberu s toho Form1(Unit1) s uses Unit2 a přidám do vlákna(Unit2) ,jak poradil pme, tak to…
Mireček 10.08.2012 20:31
Mireček
Prostě potřebuji Form1 (Unit1), kde je button a edit. Při kliknuti na button vytvořím a spustím vlák…
Mireček 10.08.2012 20:39
Mireček
daj sem kompletny program (taky stav ktory sa da prelozit) a napis ze co nefunguje P.S. nemusis upl…
MM.. 10.08.2012 21:01
MM..
Takže chceš z Unit1 používať Unit2 (kvôli spusteniu vlákna) a z Unit2 chceš používať Unit1 (kvôli pr…
los 10.08.2012 21:42
los
Takže chceš z Unit1 používať Unit2 (kvôli spusteniu vlákna) a z Unit2 chceš používať Unit1 (kvôli pr…
pme 10.08.2012 21:56
pme
Aha, áno, keď to dá do implementation, tak mu to dovolí. Edit: Ale aj tak bude lepšie to oddeliť, i…
los 10.08.2012 22:02
los
Pro MM: Není kompletní program, jen se učím a zkouším Pro los: píšete ‘’’ mohol by si to dať do jedn… poslední
Mireček 11.08.2012 08:18
Mireček

No.
Vytvořím novy projekt, do form1 vložím edit
Vytvářím Thread přes New Items – ThreadObject
Do Form1 – uses přidám Unit2 což je Thread.
A do Threadu

procedure vlakno.Execute;
var a:string;
begin
a := Form1.edit1.text;
end;

Vyhodí to
[DCC Error] Unit2.pas(23): E2003 Undeclared identifier: 'Form1'

Prostě někde dělám chybu a vlákno nevidí Form1

PS:Za tu hrubku se omlouvám,ještě před 10 lety jsem netušil že skončím tady,mama se vdala a já musel jít.
Tak doufam že prominete :-[

Vzhladom na chybovu hlasku Undeclared identifier: 'Form1' by som povedal ze v tom unit2.pas musis na zaciatku deklarovat co to je Form1, t.j. nejak tam zadat ze Unit2 pouziva Form1 (t.j. ne Do Form1 – uses přidám Unit2, ale zrejme to treba deklarovat naopak)
S delphi nerobim len ti interpretujem tu hlasku :)

Treba pridať Unit, kde sa nachádza Form1 - u Teba zrejme Unit1... Pochopiteľne ,ak chceš odkazovať na nejakú triedu, objekt, premennú atď, ktorá sa nachádza inde
než je unit v ktorom odkazuješ...

unit Unit2;

interface

uses ......, Unit1;

No když odeberu s toho Form1(Unit1) s uses Unit2 a přidám do vlákna(Unit2) ,jak poradil pme, tak to funguje a mužů s vlákna přistupovat do Form1.

Když nechám ve Form1(Unit1) v uses Unit2 a ve vláknu(Unit2)bude v uses Unit1
tak mi delphi vyhodí [DCC Fatal Error] Unit1.pas(7): F2046 Out of memory.

Když s Form1(Unit1)odeberu Unit2 tak zas Form1 nevidí vlákno a tudíž ho s Form1 nemohu spouštět.

Nějak to mam poplantane :-/

Takže chceš z Unit1 používať Unit2 (kvôli spusteniu vlákna) a z Unit2 chceš používať Unit1 (kvôli prečítaniu hodnoty z TEdit). Z toho ti vznikne kruhová referencia medzi unitmi, čo ti kompilátor nedovolí.

Preto to musíš vymyslieť tak, aby to nebolo takto vzájomne závislé. Resp. mohol by si to dať do jednej unity a použiť forward deklaráciu, ale to by bolo zbytočne neprehľadné.

ThreadObject je objekt, ktorý vytváraš vo Form1. Takže najjednoduchšie bude, keď pri inštancovaní objektu pošleš do konštruktora hodnotu z toho TEditu, napr. vlakno.Create(Form1.edit.text, CreateSuspended). V konštruktore thread objectu si ju zapamätáš v členskej premennej a následne ju použiješ vo vlakno.Execute.

Pro MM: Není kompletní program, jen se učím a zkouším
Pro los: píšete ‘’’ mohol by si to dať do jednej unity’
Vlákna, které jsou v jedné unit jsem zvládl, i vlákna ve funkci.
Rad bych i toto vyřešil a uměl.
Nevím jak u Vás ale tady venku chčije.
Neměl by někdo čas udělat nějaký malý přiklad.
Form (Unit1), kde bude button a třeba edit.
Při kliknuti na button by se spustilo vlákno, které je v Unit1 a třeba zapsalo něco do toho editu.
Pro profika bych řek brnkačka na par minut, ne.

Zpět do poradny Odpovědět na původní otázku Nahoru