Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)

[es] :: Pascal / Delphi / Kylix :: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)

Strane: 1 2

[ Pregleda: 1482 | Odgovora: 21 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3869
*.verat.net.

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)12.01.2005. u 19:25

1) Kako da napravim Timer u runtime-u. Kaze [Error] AnimBckgnd.pas(50): Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter' kad pokusam da stavim obicnu proceduru na OnTimer. Molio bih primer (malo code tagova :)

2) Imam tekstualni fajl koji ovako izgleda:

Code:

111
1 1
111


Zanima me kako citanjem slovo po slovo da mi kreira dinamicki niz slika ovako poredjanih:
Code:

----------------------
|      |       |     |
|      |       |     |
----------------------
|      |       |     |
|      |       |     |
----------------------
|      |       |     |
|      |       |     |
----------------------

(sve kockice treba iste velicine da budu : kockice=slike{TImage})
...s tim da se u polju 5 (srednja kockica) ne pojavi slika (na mestu space-a da se nista ne pojavljuje ali da odvaja toliku razdaljinu, kao za sliku)... evo sta sam ja skrabao (nedostaje glavni deo)...

Code:

function LoadWorld(matrix_file,bitmap_extension:string;block_width,block_height:integer;parent:TForm):boolean;
var
  //array of images which represents blocks
  blocks:array of TImage;
  //variables for filesize
  nSize:integer;
  hfile:thandle;
  strSize:string;
  //variables for loading into buffer
  p:char;
  buffer:string;
  a:textfile;
  //for going through matrix
  loop:integer;
  trenutni_red,trenutna_kolona:integer;
begin
//suppose that there was error
  Result:=false;
//get file size
  hfile:=CreateFile(pchar(matrix_file),0,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
  nSize:=GetFileSize(hfile,nil);
  CloseHandle(hfile);
  SetLength(strSize,20);
  Str(nSize,strSize);
//set number of blocks to filesize (that's max)
  SetLength(blocks,StrToInt(strSize));
//load file into buffer
  assignfile(a,matrix_file);
  reset (a);
      while not Eof(a) do
      begin
        Read(a, p);
        buffer:=buffer+p;
      end;
  closefile(a);
//now we need to go through matrix and to create images
trenutni_red:=1;
trenutna_kolona:=1;
  for loop:=1 to Length(buffer) do begin

  //izmedju ostalog, if buffer[loop]<>' ' then kreiraj blok

  end;
end;


...ne znam zasto volim da komentujem na engleskom :)

p.s. posle ovoga bi jednostavni...
LoadWorld('test.mtx','img',20,20,Form1);
...vrsio posao...

p0zdrav i hvala unapred

Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
12.01.2005. u 19:25 

bancika
Branislav Stojkovic
Nis, New York

Član broj: 24844
Poruke: 620
*.vdial.verat.net.

ICQ: 84215453
Sajt: www.storm-software.co.yu/..


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)12.01.2005. u 20:52
za prvo ne znam...
za drugo samo ukratko.
Code:

var Slike: array [1..10, 1..10] of TImage;
for i := 1 to BrojVrsta do
  for j := 1 to BrojKolona do
    begin
      Read(F, C);
      if C = '1' then
        begin
           Slike[i, j] := TImage.Create(Form1);
           Slike[i, j].Parent := Form1;
           Slike[i, j].Width := 100;
           Slike[i, j].Height := 100;
           Slike[i, j].Left := (i-1)*100;
           Slike[i, j].Top := (j-1)*100;
           //ovde nacrtaj nesto po slici
        end;
//...na kraju
for i := 1 to BrojVrsta do
 for j := 1 to BrojKolona do
   if Assigned(Slike[i, j]) then Slike[i,j].Free


btw, i ja volim komentare na engleskom

pozdrav
Ride the rainbow, crack the sky
12.01.2005. u 20:52 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.neobee.net.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)12.01.2005. u 23:26
Postuj liniju u kojoj dodeljujes odredjenu proceduru na OnTimer event. Ovako mozemo samo da nagadjamo.

Dodeljivanje procedure bi mislim trebalo Timer1.OnTimer := @NekaProcedura. A NekaProcedura :

Code:

procedure TForm1.NekaProcedura(Sender: TObject);
begin
...
end;
12.01.2005. u 23:26 

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.verat.net.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)13.01.2005. u 02:11
Citat:

Timer1.OnTimer := @NekaProcedura


Samo bez @.
A za sta ti to treba, jeli JaHvrame? ;-)
13.01.2005. u 02:11 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3869
*.verat.net.

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)13.01.2005. u 13:45
probao sam sa Timer1.OnTimer := NekaProcedura; i daje onu gresku. Kaze ne moze procedura, mora TNotifyEvent... :(

a sta ce mi... ma nesto za onaj engine :P (salim se)
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
13.01.2005. u 13:45 

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 614
*.zaslon-telecom.si.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)13.01.2005. u 14:02
Procedura ti mora biti clan klase (TForm, recimo) i mora imati parametar (Sender: TObject).

Tako ti je procedura postala TNotifyEvent :)

Evo ti i malo kooda:

Code:

procedure TForm1.BlaBla(sender:TObject);
begin
  ShowMessage('sale');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.OnTimer := BlaBla;
end;


ss.
When something is hard to do, then it's not worth doing.
13.01.2005. u 14:02 

Voodoo
Novi Beograd

Član broj: 3508
Poruke: 488
*.beograd-2.tehnicom.net.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)13.01.2005. u 15:42
Mislim da bi uništavanje dinamički kreiranih objekata trebalo da se vrši u obrnutom redosledu (tj. od poslednjeg kreiranog). Znam da meni nije htelo kad sam radio od prvog do zadnjeg...
13.01.2005. u 15:42 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3869
*.verat.net.

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)14.01.2005. u 16:26
ali kako da bude u klasi TForm kad se radi o UNIT-u i tamo nema formova :(

edit: @bancika - a kako da izvalim kad je kraj reda sa onim tvojim kodom?
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
14.01.2005. u 16:26 

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.vdial.verat.net.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)14.01.2005. u 17:23
Mislim da to nije bitno, mislim da je samo bitno da se procedura kvalifikuje kao TNotifyEvent po broju i tipu parametara, ali nisam probao
(jer TNotifyEvent je procedure of object, like ANY object).
14.01.2005. u 17:23 

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.vdial.verat.net.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)14.01.2005. u 17:35
Evo ti kompletan kod (koji radi):
Code:

unit MyClass;

interface

uses
  Classes, ExtCtrls;

type
  TMyClass = class
    MyTimer: TTimer;
  private
    MyOwner: TComponent;
    procedure DoSomething(Sender: TObject);
  public
    constructor Create(AOwner: TComponent);
  end;

implementation

{ TMyClass }

constructor TMyClass.Create(AOwner: TComponent);
begin
  MyOwner := AOwner;
  MyTimer := TTimer.Create(MyOwner);
  MyTimer.OnTimer := DoSomething;
  //MyTimer.Interval := 10;
  //MyTimer.Enabled := True;
end;

procedure TMyClass.DoSomething(Sender: TObject);
begin
  //Do Timed Something...
end;

end.
14.01.2005. u 17:35 

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 614
195.246.3.*



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)14.01.2005. u 22:51
Citat:
_v!rus_: ...mislim da je samo bitno da se procedura kvalifikuje kao TNotifyEvent po broju i tipu parametara, ...
(jer TNotifyEvent je procedure of object, like ANY object).


Upravo tako, ja sam TForm stavio kao primer, stvar je samo u prenosu parametara.

ss.
When something is hard to do, then it's not worth doing.
14.01.2005. u 22:51 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3869
*.verat.net.

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)15.01.2005. u 12:30
ok, uspeo sam ono za timer, i skapirao sam sad kako to ide. Hvala (pogledajte attach)

ono za slike nisam ni probao jer je za novi red #13 pa #10, tako? e sad, kako to u kodu da... bla bla :)

Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Prikačeni fajlovi
15.01.2005. u 12:30 

bancika
Branislav Stojkovic
Nis, New York

Član broj: 24844
Poruke: 620
213.244.208.*

ICQ: 84215453
Sajt: www.storm-software.co.yu/..


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)15.01.2005. u 12:47
ako znas dimenzije matrice onda nije problem:
Code:

for i := 1 to n do
begin
 for j := 1 to m do
  Read(F, a[i,j]);
 ReadLn(F); //prelaz u novi red, preskace #10 i #13
end;

a ako ne znas onda
Code:

i := 0;
while not Eof(F) do
begin
 Inc(i);
 ReadLn(F ,s); //s: string;
 for j := 1 to Length(s) do
  a[i, j] := s[j]l
end;

pozdrav
Ride the rainbow, crack the sky
15.01.2005. u 12:47 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3869
*.verat.net.

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)15.01.2005. u 14:52
e, to mi je trebalo... valjda :)

probacu pa javljam kasnije... veceras... sutra...
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
15.01.2005. u 14:52 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3869
*.verat.net.

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)15.01.2005. u 16:35
ono mi nije odgovaralo, pa sam zasuko rukave :)

evo skoro gotove funkcije:
Code:

function LoadWorld(matrix_file,graphics_directory,bitmap_extension:string;x,y,block_width,block_height:integer;parent:TForm):boolean;
var
  //array of images which represents blocks
  blocks:array of TImage;
  //variables for filesize
  nSize:integer;
  hfile:thandle;
  strSize:string;
  //variables for loading into buffer
  p:char;
  buffer:string;
  a:textfile;
  //for going through matrix
  loop:integer;
  trenutni_red,trenutna_kolona:integer;
begin
//suppose that there was error
  Result:=false;
//get file size
  hfile:=CreateFile(pchar(matrix_file),0,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
  nSize:=GetFileSize(hfile,nil);
  CloseHandle(hfile);
  SetLength(strSize,20);
  Str(nSize,strSize);
//set number of blocks to filesize (that's max)
  SetLength(blocks,StrToInt(strSize));
//load file into buffer
  assignfile(a,matrix_file);
  reset(a);
      while not Eof(a) do
      begin
        Read(a, p);
        buffer:=buffer+p;
      end;
  closefile(a);
//now we need to go through matrix and to create images
trenutni_red:=0;
trenutna_kolona:=0;
 for loop:=1 to Length(buffer) do begin
 //increase column on every step
 Inc(trenutna_kolona);
   //when reach #13#10 (eoln) then reset column and increase row
   if buffer[loop]+buffer[loop+1] = #13#10 then begin
   trenutna_kolona:=0;
   Inc(trenutni_red);
   end;
  //now create images
  if (buffer[loop] <> ' ') and (buffer[loop] <> #13) and (buffer[loop] <> #10) then begin
    blocks[loop] := TImage.Create(parent);
    blocks[loop].Parent := parent;
    blocks[loop].Width := block_width;
    blocks[loop].Height := block_height;
      if (trenutni_red = 0) and (trenutna_kolona = 0) then begin
        blocks[loop].Left := x;
        blocks[loop].Top := y;
      end else begin
        blocks[loop].Left := trenutna_kolona * block_width;
        blocks[loop].Top := trenutni_red * block_height;
      end;
    blocks[loop].Transparent := true;
    blocks[loop].AutoSize := false;
    blocks[loop].Stretch := true;
    blocks[loop].Visible := true;
    blocks[loop].Picture.RegisterFileFormat(bitmap_extension,'Bitmap file',TBitmap);
      if graphics_directory <> '' then blocks[loop].Picture.LoadFromFile(graphics_directory+'\'+buffer[loop]+'.'+bitmap_extension)
        else blocks[loop].Picture.LoadFromFile(buffer[loop]+'.'+bitmap_extension);
  end;
 end;
end;


e, problem je sto mi je prvi red uvucen za jedan blok (dodam space u prvom redu mtx fajla i problem resen) i drugi problem: ne slusa me :) tj. ne postavlja matricu slika gde ja hocu (zadato u pozivu funkcije:0,0) vec ga baci ko zna gde

pogledati attach (i ispraviti ako je moguce)
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Prikačeni fajlovi
15.01.2005. u 16:35 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.blueisp.co.yu.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)15.01.2005. u 17:01
Mnogo si zakomplikovao u ovoj funkciji gore... Okacicu ovde malo kasnije novu fju.

Jedno pitanje - da li je neophodno da kreiras onoliko TImage objekata koliko je zapisano u mtx fajlu ?
15.01.2005. u 17:01 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.blueisp.co.yu.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)15.01.2005. u 18:00
Code:

procedure LoadWorld(matrix_file, graphics_directory, bitmap_extension : String;
                    X, Y, block_width, block_height : Integer;
                    target : TImage);
var
  srcbmp : TBitmap;
  SFile  : TextFile;
  FLine  : String;
  C1     : Integer;
  YC     : Integer;
begin
  If (graphics_directory <> '') and
     (graphics_directory[Length(graphics_directory)] <> '\') Then
    graphics_directory := graphics_directory + '\';

  srcbmp := TBitmap.Create;
  srcbmp.Transparent := TRUE;

  YC := 0;
  target.Width := 0;
  target.Height := 0;
  AssignFile(SFile, matrix_file);
  Reset(SFile);
    While not Eof(SFile) Do
    Begin
      ReadLn(SFile, FLine);

      Inc(YC);
      If target.Width < Length(FLine) * block_width Then
        target.Width := Length(FLine) * block_width;
      If target.Height < YC * block_height Then
        target.Height := YC * block_height;

      For C1 := 1 to Length(FLine) Do
        If (FLine[C1] <> ' ') and
           (FileExists(graphics_directory + FLine[C1] + '.' + bitmap_extension)) Then
        Begin
          srcbmp.LoadFromFile(graphics_directory + FLine[C1] + '.' + bitmap_extension);
          srcbmp.TransparentColor := srcbmp.Canvas.Pixels[0, 0];
          target.Canvas.Draw((X + C1 - 1) * block_width, (Y + YC - 1) * block_width, srcbmp);
          srcbmp.FreeImage;
        End;
    End;
  CloseFile(SFile);

  srcbmp.Free;
end;


Evo nove procedure. Sve se crta na jednom TImage objektu. Elem, ima jedna greska - u linijama If target.Height < YC * block_height Then i target.Height := YC * block_height; se podesava visina slike... I posle izlaska iz procedure visina slike je dobra, ali ne znam zasto nece da se vidi kako treba...

Radio sam arkanoid pre godinu-dve na veoma slican nacin kao ovaj tvoj, ako zelis mogu da nadjem source pa da ti posaljem na mail.
15.01.2005. u 18:00 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3869
*.verat.net.

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)15.01.2005. u 22:27
pa ja sam mislio na odvojene slike zbog prostora izmedju slika gde su space-ovi - zbog collision-a (ako se tako pise)

posalji i arkanoid source na avramyu at gmail dot com

sto se ovoga tice mislim da bi bolje bilo sa vise slika... neka nova ideja za detekciju sudara sa zidovima?
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
15.01.2005. u 22:27 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3869
*.verat.net.

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)16.01.2005. u 10:31
ovako sam ga pomerio ulevo, ali nije to to :)

Code:

...
blocks[loop].Left := (trenutna_kolona * block_width) - (block_width * 2);
..


ali ovim mi otpada x i y pozicioniranje vec ostaje samo 0,0 :(
mozda da radim sa frame-ovima?
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
16.01.2005. u 10:31 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.blueisp.co.yu.



Profil

icon Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)16.01.2005. u 11:37
Bug oko pozicioniranja slika mozes resiti tako sto ces liniju Inc(trenutna_kolona); pomeriti pred kraj for petlje. (znaci posle kreiranja slicica)

Kasnije cu ti poslati arkanoid (samo da nadjem source), i sam sam u pocetku mislio da je najbolje raditi sa TImage, ali kad sam imao preko 70-tak kreiranih slicica cela igra je radila sporo... Onda sam presao na PaintBox, i na kraju sam zakljucio da je najbolje da radim preko DirectX-a, pa sam odustao :)
16.01.2005. u 11:37 

[es] :: Pascal / Delphi / Kylix :: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla)

Strane: 1 2

[ Pregleda: 1482 | Odgovora: 21 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.