Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

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

  • 21 odgovor
  • 6.375 pregleda

Najnovija ↓

Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 12.01.2005. u 20:25 · pre 265 meseci #1
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
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 12.01.2005. u 21:52 · pre 265 meseci #2
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
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 13.01.2005. u 00:26 · pre 265 meseci #3
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;
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 13.01.2005. u 14:45 · pre 265 meseci #5
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)
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 13.01.2005. u 15:02 · pre 265 meseci #6
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.
Potpis
When something is hard to do, then it's not worth doing.
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 14.01.2005. u 17:26 · pre 265 meseci #8
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?
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 14.01.2005. u 18:35 · pre 265 meseci #10
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.
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 14.01.2005. u 23:51 · pre 265 meseci #11
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.
Potpis
When something is hard to do, then it's not worth doing.
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 15.01.2005. u 13:30 · pre 265 meseci #12
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 :)
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 15.01.2005. u 13:47 · pre 265 meseci #13
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
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 15.01.2005. u 17:35 · pre 265 meseci #15
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)
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 15.01.2005. u 19:00 · pre 265 meseci #17
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.
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 15.01.2005. u 23:27 · pre 265 meseci #18
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?
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 16.01.2005. u 11:31 · pre 265 meseci #19
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?
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: Dva nevezana pitanja (Timer i nesto oko citanja fajlova i slika bla bla) 16.01.2005. u 12:37 · pre 265 meseci #20
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 :)
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme