Odwołanie do komponentu z innej formy

0

Przykładowo jestem w drugiej formie (unit2) i chcę się odwołać do komponentu z pierwszej formy. Jak to zrobić?

Robiłem coś takiego:
TForm1.Komponent
ale wywalało błąd....

0

PS. Jak w Unit1 uruchomić wątek aaa.Execute?

0

W sekcji "uses" musisz mieć dodane Unit do którego chcesz się odwołać np.
uses
Unit2;
Później piszesz np.
Unit2.Button1Click (self);

Pozdrawiam ;D

0

ok thx a jeszcze jak uruchomić wątek w którym mam aaa.Execute?

0

Napisz coś więcej o tym wątku ;-)

ps. Jeśli chodzi o sekcję "uses" to wstaw ją po słowie "implementation" np.

implementation
uses
Unit2;
{$R *.dfm}

0

Jest to nagrywanie mikrofonu (trzeba zastosować wątek bo inaczej program zawiesza się na czas nagrywania). Oto kod wątku, jak go uruchomić poprzez buttona na Form1?

unit Unit2;

interface

uses
Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF}, mmsystem;

type
aaa = class(TThread)
private
procedure SetName;
protected
procedure Execute; override;
end;

implementation

{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,

  Synchronize(UpdateCaption);

and UpdateCaption could look like,

procedure aaa.UpdateCaption;
begin
  Form1.Caption := 'Updated in a thread';
end; }

{$IFDEF MSWINDOWS}
type
TThreadNameInfo = record
FType: LongWord; // must be 0x1000
FName: PChar; // pointer to name (in user address space)
FThreadID: LongWord; // thread ID (-1 indicates caller thread)
FFlags: LongWord; // reserved for future use, must be zero
end;
{$ENDIF}

{ aaa }

procedure aaa.SetName;
{$IFDEF MSWINDOWS}
var
ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
ThreadNameInfo.FType := $1000;
ThreadNameInfo.FName := 'Nagrywaj';
ThreadNameInfo.FThreadID := $FFFFFFFF;
ThreadNameInfo.FFlags := 0;

try
RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );
except
end;
{$ENDIF}
end;

procedure aaa.Execute;
var
wDeviceID:integer;
openp:MCI_OPEN_PARMS;
recordp:MCI_RECORD_PARMS;
savep:MCI_SAVE_PARMS;
begin
SetName;
{ Place thread code here }
// ustawiamy typ urządzenia
openp.lpstrDeviceType:='waveaudio';
openp.lpstrElementName:='';
// otwieramy urządzenie
mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT or MCI_OPEN_TYPE,DWORD(@openp));
// pobieramy identyfikator urządzenia
wDeviceID:=openp.wDeviceID;
// długość pliku
recordp.dwTo:=12000;
// zaczynamy nagrywanie
mciSendCommand(wDeviceID,MCI_RECORD,MCI_TO or MCI_WAIT,DWORD(@recordp));
// zapisujemy plik
savep.lpFileName:='C:\bbb.wav';
mciSendCommand(wDeviceID,MCI_SAVE,MCI_SAVE_FILE or MCI_WAIT,DWORD(@savep));
end;

end.

0

Jeśli masz przypisany wątek do buttona, to wydaje mi się, że wystarczy wywołać procedure ButtonClick.

Unit1.ButtonClick (self); :-)

0

A nie, np.

Form1.ButtonClick(Self);

Unit1 to nazwa pliku, a nie klasy formy. :P

0

a macie może przykład kodu jakiegoś prostego programu z wykorzystaniem wątku? (najlepiej nauczyć się na przykładach)

0

przestancie zadawac takie pytania!!
qrde, ludzie, przeciez dotarcie do czegos takiego zajmuje kilka sekund, duzo krocej niz czekanie na odpowiedz na forum!
masz :-P :
Artykuły
patrzec pod "W" :-P

0

w delphi masz przykład sortowania na wątkach

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