www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Delphi -težave, napotki, nasveti...
Pojdi na stran Prejšnja  1, 2, 3, 4, 5  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.78

PrispevekObjavljeno: Pon Avg 17, 2009 11:16 pm    Naslov sporočila:   Odgovori s citatom

Kako na enostaven način dostopati do večjega števila Shape objektov?

Koda:
Shape1.Brush.Color:=ClRed;
 Shape2.Brush.Color:=ClRed;
 Shape3.Brush.Color:=ClRed;
...
...
 Shape50.Brush.Color:=ClRed;




Sivo, oprosti, sem stisnil Uredi namesto Citiraj d'oh! , pa sem ti pobrisal besedilo Silenced aly.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.59
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Avg 18, 2009 8:13 am    Naslov sporočila:   Odgovori s citatom

Narediš eno posebno proceduro, ki ji daš le zaporedno številko, ona ti pa vrne objekt Shape s tisto številko.

Koda:
function TMainForm.ThisShape(i : integer) : TShape;
begin
  case i of

      1 : result := Shape1 ;
      2 : result := Shape2 ;
      3 : result := Shape3 ;
      4 : result := Shape4 ;
      ...
     49 : result := Shape49 ;
     50 : result := Shape50 ;
     51 : result := Shape51 ;
     52 : result := Shape52 ;

     else result := Shape1 ; // napaka!!

  end;
end;


Koda:
      // sprememba višine
      for j := 1 to 12 do
        begin
        ThisShape(j*4+0).Height := 12; // resetiraj vse
        ThisShape(j*4+1).Height := 12;
        ThisShape(j*4+2).Height := 12;
        ThisShape(j*4+3).Height := 12;

        ThisShape(j*4+num).Height := 15; // izbrana
        end;

      // sprememba barve
      for J := 0 to 52 do
        begin
        case (J-1) MOD 4 of
          0: barva := clLime;
          1: barva := clYellow1;
          2: barva := clBlue;
          3: barva := clRed;
        end; // case
        ThisShape(j).Brush.Color := barva;
        end;


Drugi primer pa bi bil, da daš shape na en Panel. Shape-i so potem "child" objekti tega panela in jih lahko indeksiraš. Ampak tega še nisem poskušal...

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
urosg
Član
Član



Pridružen-a: Pet 27 Apr 2007 14:30
Prispevkov: 565
Aktiv.: 2.55

PrispevekObjavljeno: Tor Avg 18, 2009 9:37 am    Naslov sporočila:   Odgovori s citatom

Lahko pa naredis nekaj takega ce zelis dostopati do vseh shape objektov v doloceni formi / panelu:

Koda:

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to self.ControlCount-1 do
    if self.Controls[i] is TShape then
      TShape(self.Controls[i]).Brush.Color := barva;
end;


To je za shape objekte na formi kjer imas tudi "Button2" s tem klikom. Drugace samo nadomestis "self" z objektom katerega "otroci" so TShape objekti.

LP, Uros
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.78

PrispevekObjavljeno: Tor Avg 18, 2009 2:21 pm    Naslov sporočila:   Odgovori s citatom

Hvala obema za nasvet. Bom poskusil zvečer.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.78

PrispevekObjavljeno: Tor Avg 18, 2009 5:51 pm    Naslov sporočila:   Odgovori s citatom

Uros tvoja rešitev bo prav idealna za to kar nameravam narediti.

Zakaj gre?. Nameravam narediti generator kode za grafični displej. Nekaj podobnega kot sem pred časom naredil za displej 5x8 (Programček v prilogi)
Za enkrat sem testno naredil matrico 48x24 (1152 shape-tov) Je kak limit števila uporabljenih objektov? Ima morda še kdo kako drugo idejo?


Uroš, še enkrat hvala.



matrix.zip
 Opis:

Download
 Ime datoteke:  matrix.zip
 Velikost datoteke:  200.67 KB
 Downloadano:  10 krat


_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.59
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Avg 18, 2009 10:33 pm    Naslov sporočila:   Odgovori s citatom

Ajj ... Silvo, to je strel čisto mimo.

Uporabi PaintBox in na njem Canvas.
To je prazno grafično platno, po katerem packaš gor karkoli želiš.
Eno stran nazaj... KLIK !

Z mouse over in mouse move (nekaj takega) spreminjaš X in Y globalni spremenljivki, v katerih imaš pozicijo kurzorja nad PaintBox-om. Nato uporabiš še OnClick, ki se sproži ob pritisku na tipko miške in nekaj naredi na tisti X-Y koordinati. Easy Wink

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.78

PrispevekObjavljeno: Tor Avg 18, 2009 11:00 pm    Naslov sporočila:   Odgovori s citatom

aly je napisal/a:
Ajj ... Silvo, to je strel čisto mimo.

Uporabi PaintBox in na njem Canvas.
To je prazno grafično platno, po katerem packaš gor karkoli želiš.
Eno stran nazaj... KLIK !

Z mouse over in mouse move (nekaj takega) spreminjaš X in Y globalni spremenljivki, v katerih imaš pozicijo kurzorja nad PaintBox-om. Nato uporabiš še OnClick, ki se sproži ob pritisku na tipko miške in nekaj naredi na tisti X-Y koordinati. Easy Wink


Ristati ni problem. Ne vem pa kako naj obdelam narisano. Displej, ki ga trenutno uporabljam v grafičnem načinu riše od leve proti desni. En byte je 8 vodoravnih točk.
Programček je napisan do take meje, da že zna generirat kodo. Kako bi to izvedel v PaintBox.u s Canvas-om nimam pojma Sad

Screen shot do sedaj narejenega:



screen.jpg
 Opis:
 Velikost datoteke:  174 KB
 Pogledana:  28 krat

screen.jpg



_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.59
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Avg 18, 2009 11:35 pm    Naslov sporočila:   Odgovori s citatom

varianta 1 .) Canvas se da prebrat, kot slikco.

varianta 2 .) poleg na canvas "rišeš" še v en XY array boolean spremenljivk, iz katerega nato poračunaš vrednosti.

Sicer pa, če si že tako daleč, se ne splača spreminjat. Razen, če imaš željo po matematičnem mozganju Wink

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
janbar
Član
Član



Pridružen-a: Sre 15 Nov 2006 17:59
Prispevkov: 81
Aktiv.: 0.36
Kraj: Ig

PrispevekObjavljeno: Ned Avg 23, 2009 10:58 am    Naslov sporočila:   Odgovori s citatom

Če prav razumem, hočeš iz že narisanega canvas zgenerirat kodo za displej?
Potem rabiš samo dve for zanki, prva ki gre po posamezni vrstici, druga pa po 8 stolpcev.
Približno enak postopek pa je za obratno smer.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.78

PrispevekObjavljeno: Sob Avg 29, 2009 2:01 pm    Naslov sporočila:   Odgovori s citatom

Ok, uporabil Canvas ter array. Zadeva je narejena do take mere, da pride na vrsto testiranje na displeju- da vidim, če stvar deluje, kot sem si zamislil.

Mimogrede, kako naj spremenjivko tipa array shranem v neko datoteko, ter jo ponovno naložim ob zagonu programa? Prepisovanje v niz ter prepis v txt datoteko ali kako drugače. Rad bi ob zapiranju shranil zaslon. Tabela je 160x80.

V prilogi kaj je nastalo...



DisGenerator.zip
 Opis:

Download
 Ime datoteke:  DisGenerator.zip
 Velikost datoteke:  207.21 KB
 Downloadano:  10 krat


_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.50

PrispevekObjavljeno: Sob Avg 29, 2009 2:29 pm    Naslov sporočila:   Odgovori s citatom

Lahko deklariras kar file of tvoj_tip, kjer je tvoj_tip tisti array, in imas potem spremenljivko istega tipa, v katero pises in iz katere beres. Sicer je to precej po kavbojsko, je pa najbolj enostavno za zacetnika. V file pises tako, kot v druge tipizirane datoteke, torej z write(f, spremenljivka).

Normalno bi ali napisal svoje funkcije za prenos podatkov v in iz datoteke, ali pa uporabil blockread/blockwrite in pisal direktno v pomnilnik, kjer bi morala biti ustrezno mapirana spremenljivka.

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Sob Avg 29, 2009 3:49 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
Mimogrede, kako naj spremenjivko tipa array shranem v neko datoteko, ter jo ponovno naložim ob zagonu programa? Prepisovanje v niz ter prepis v txt datoteko ali kako drugače. Rad bi ob zapiranju shranil zaslon. Tabela je 160x80.


Uporabiš objekt TFileStream in kličeš write, read ali seek!

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.78

PrispevekObjavljeno: Pon Avg 31, 2009 12:27 pm    Naslov sporočila:   Odgovori s citatom

Rešil po nasvetu GJ. Hvala.

Še ena glede tabel. Recimo, da imam dve strukturno enaki. Obstaja kaka enostavnejša varianta v stilu "copy" kopiranja vsebine ene v drugo, kot prepisovanje zapisa po zapisu.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pon Avg 31, 2009 1:20 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
Še ena glede tabel. Recimo, da imam dve strukturno enaki. Obstaja kaka enostavnejša varianta v stilu "copy" kopiranja vsebine ene v drugo, kot prepisovanje zapisa po zapisu.


Če sta tipa variabel enaka potem enostavno prirediš:
Koda:

MyRecordA := MyRecordB;


...al pa castaš, če to prevajalnik dopusti:
Koda:

MyRecordA := TMyRecordA(MyRecordB);


Drugače pa s funkcijo move, ampak to je 'hardcore' način! Rolling Eyes
Koda:

Move(MyRecordB, MyRecordA, SizeOf(MyRecordB));

Če imaš v record-u dinamične variable (recimo String) al pa objekte, potem ta varianta ne gre!

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sundancer
Član
Član



Pridružen-a: Ned 08 Avg 2004 22:30
Prispevkov: 374
Aktiv.: 1.57
Kraj: Ljubljana

PrispevekObjavljeno: Pon Sep 07, 2009 10:57 pm    Naslov sporočila:   Odgovori s citatom

Imam kodo, ki runtime zgenerira TButton. Istocasno bi rad runtime generiral tudi ostale komponente (TLabel, TMemo,.. ). Je lazje narediti za vsako komponento identicen konec kode vendar z drugim (objekt).create ali se da s kaksno zvijaco iti po liniji najmanjsega odpora Smile

Koda:

..
    aButton:  array of TButton;
    iButton:  byte; //256

..
procedure TForm1.CreateButton(Sender: TObject);
begin
  if iButton = High(iButton) then
    begin
      ShowMessage('limit reached');
      Exit;
    end;
  try
    aButton[iButton]:=TButton.Create(self);
    with aButton[iButton] do
    begin
      Parent:=self;
      top:=10+iButton*4;
      left:=top;
      width:=90;
      height:=60;
      caption:='myButton'+IntToStr(iButton);
      name:=caption;
      onMouseDown:=GenericMouseDown;
      onMouseUp:=GenericMouseUp;
      onMouseMove:=GenericMouseMove;
    end;
  finally
    iButton:=iButton+1;
    SetLength(aButton,iButton+1);
  end;
end;


Ali potrebujem za shranjevanje teh runtime generiranih objektov za vsak tip svoj array ali se da kako drugace narediti, da bi po potrebi dostopal do njih? Razmisljal sem o varianti Form1.Components in potem poiscem tisto ki potrebujem

lp, Marko
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3, 4, 5  Naslednja
Stran 3 od 5

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 10 dni


Powered by phpBB © 2001, 2005 phpBB Group