Ładny brzuch
Mam zdarzenie OnTimer i np. 2 grupy procedur, np.
showmessage('nic'); if i=1 then showmessage('1'); for i := 0 to 100 do showmessage('i');
CHc eby pierwsza grupa procedur zostala wykonana tylko raz, za pierwszym tyknieciem zegara, natomiast druga cz by bya zawsze wykonywana, przy kadym tykniciu. Jak to zrobi?
Powiedzmy, e twj komponent to Timer1;
Dla komponentu Timer1 ustaw w zakadce Properties pole Enabled na False
W pliku nagwkowym (Header File) w klasie twojego formularza w sekcji private dodaj jak zmienn typu Boolean np. b;
Zdarzenie OnCreate formularza
void __fastcall TForm1::FormCreate(TObject *Sender) { b=TRUE; Timer1->Enabled=TRUE; //dalsza cz metody }
Zdarzenie OnTimer komponentu Timer1
void __fastcall TForm1::Timer1Timer(TObject *Sender) { if(b==TRUE) { //cz wykonana tylko raz } else { b=FALSE; } //cz wykonywana w kadym takcie zegara }
Pozdrawiam
Jarek
Uytkownik krolikj edytowa ten post 25 listopad 2005, 16:10
Mam zdarzenie OnTimer i np. 2 grupy procedur, np.
showmessage('nic'); if i=1 then showmessage('1'); for i := 0 to 100 do showmessage('i');
CHc eby pierwsza grupa procedur zostala wykonana tylko raz, za pierwszym tyknieciem zegara, natomiast druga cz by bya zawsze wykonywana, przy kadym tykniciu. Jak to zrobi?
Edit: // POmyliem si w poprzedniej kwestii z tym kodem, bo wina byla w innym zdarzeniu, sorki za to, ale skoro juz napisalem posta to go sporzytuje na pytanie:
procedure TForm1.tFileTimer(Sender: TObject); var F: file; Buffer : array[0..1024] of char; plik: TPackFile; RealSize: integer; begin if (TFile.Tag = 0) then begin TFile.Tag := 1; tcpClient.ReadBuffer(plik, SizeOf(plik)); DodajWpis('Przesyam screena o rozmiarze ' + inttostr(plik.size) + ' bajtw'); assignFile(f, 'scr\scr.jpg'); ReWrite(f, 1); end; tcpClient.ReadBuffer(buffer, SizeOf(buffer)); blockWrite(f, buffer, SizeOf(buffer)); closeFile(f); RealSize := RealSize + SizeOf(buffer); end;
Mam taki pikni kod, ktory ma odebrac plik. Ale pojawia sie blad I/O 103. Co on znaczy, i jak powinno byc dobrze?
A i jeszcze gdy dla testu usune procedurke BlockWrite, by sprawdzic czy chociaz odebranie pakietu do bufora dziala, to prog sie zawiesza ...
Uytkownik Kamil Wajda edytowa ten post 25 listopad 2005, 17:52
Blad i/o 103 wskazuje na to ze plik nie jest otwarty. Zauwaz ze closefile jest wykonywane w kazdej petli timera. Zas assignfile tylko raz. Wstaw taki kod. Powinno pomoc:
closeFile(f); RealSize := RealSize + SizeOf(buffer); if RealSize=plik.Size then begin closefile(t); tFileTimer.Enabled:= false; end;
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
showmessage('nic'); if i=1 then showmessage('1'); for i := 0 to 100 do showmessage('i');
CHc eby pierwsza grupa procedur zostala wykonana tylko raz, za pierwszym tyknieciem zegara, natomiast druga cz by bya zawsze wykonywana, przy kadym tykniciu. Jak to zrobi?
Powiedzmy, e twj komponent to Timer1;
Dla komponentu Timer1 ustaw w zakadce Properties pole Enabled na False
W pliku nagwkowym (Header File) w klasie twojego formularza w sekcji private dodaj jak zmienn typu Boolean np. b;
Zdarzenie OnCreate formularza
void __fastcall TForm1::FormCreate(TObject *Sender) { b=TRUE; Timer1->Enabled=TRUE; //dalsza cz metody }
Zdarzenie OnTimer komponentu Timer1
void __fastcall TForm1::Timer1Timer(TObject *Sender) { if(b==TRUE) { //cz wykonana tylko raz } else { b=FALSE; } //cz wykonywana w kadym takcie zegara }
Pozdrawiam
Jarek
Uytkownik krolikj edytowa ten post 25 listopad 2005, 16:10
Mam zdarzenie OnTimer i np. 2 grupy procedur, np.
showmessage('nic'); if i=1 then showmessage('1'); for i := 0 to 100 do showmessage('i');
CHc eby pierwsza grupa procedur zostala wykonana tylko raz, za pierwszym tyknieciem zegara, natomiast druga cz by bya zawsze wykonywana, przy kadym tykniciu. Jak to zrobi?

Edit: // POmyliem si w poprzedniej kwestii z tym kodem, bo wina byla w innym zdarzeniu, sorki za to, ale skoro juz napisalem posta to go sporzytuje na pytanie:
procedure TForm1.tFileTimer(Sender: TObject); var F: file; Buffer : array[0..1024] of char; plik: TPackFile; RealSize: integer; begin if (TFile.Tag = 0) then begin TFile.Tag := 1; tcpClient.ReadBuffer(plik, SizeOf(plik)); DodajWpis('Przesyam screena o rozmiarze ' + inttostr(plik.size) + ' bajtw'); assignFile(f, 'scr\scr.jpg'); ReWrite(f, 1); end; tcpClient.ReadBuffer(buffer, SizeOf(buffer)); blockWrite(f, buffer, SizeOf(buffer)); closeFile(f); RealSize := RealSize + SizeOf(buffer); end;
Mam taki pikni kod, ktory ma odebrac plik. Ale pojawia sie blad I/O 103. Co on znaczy, i jak powinno byc dobrze?
A i jeszcze gdy dla testu usune procedurke BlockWrite, by sprawdzic czy chociaz odebranie pakietu do bufora dziala, to prog sie zawiesza ...
Uytkownik Kamil Wajda edytowa ten post 25 listopad 2005, 17:52
Blad i/o 103 wskazuje na to ze plik nie jest otwarty. Zauwaz ze closefile jest wykonywane w kazdej petli timera. Zas assignfile tylko raz. Wstaw taki kod. Powinno pomoc:
closeFile(f); RealSize := RealSize + SizeOf(buffer); if RealSize=plik.Size then begin closefile(t); tFileTimer.Enabled:= false; end;