 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.78
|
Objavljeno: Pon Avg 17, 2009 11:16 pm Naslov sporočila: |
|
|
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 , pa sem ti pobrisal besedilo aly.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.59 Kraj: Kranj - struževo
|
Objavljeno: Tor Avg 18, 2009 8:13 am Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
urosg Član


Pridružen-a: Pet 27 Apr 2007 14:30 Prispevkov: 565 Aktiv.: 2.55
|
Objavljeno: Tor Avg 18, 2009 9:37 am Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.78
|
Objavljeno: Tor Avg 18, 2009 2:21 pm Naslov sporočila: |
|
|
Hvala obema za nasvet. Bom poskusil zvečer.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.78
|
Objavljeno: Tor Avg 18, 2009 5:51 pm Naslov sporočila: |
|
|
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.
Opis: |
|
 Download |
Ime datoteke: |
matrix.zip |
Velikost datoteke: |
200.67 KB |
Downloadano: |
10 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.59 Kraj: Kranj - struževo
|
Objavljeno: Tor Avg 18, 2009 10:33 pm Naslov sporočila: |
|
|
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
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.78
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.59 Kraj: Kranj - struževo
|
Objavljeno: Tor Avg 18, 2009 11:35 pm Naslov sporočila: |
|
|
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
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
janbar Član

Pridružen-a: Sre 15 Nov 2006 17:59 Prispevkov: 81 Aktiv.: 0.36 Kraj: Ig
|
Objavljeno: Ned Avg 23, 2009 10:58 am Naslov sporočila: |
|
|
Č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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.78
|
Objavljeno: Sob Avg 29, 2009 2:01 pm Naslov sporočila: |
|
|
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...
Opis: |
|
 Download |
Ime datoteke: |
DisGenerator.zip |
Velikost datoteke: |
207.21 KB |
Downloadano: |
10 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.50
|
Objavljeno: Sob Avg 29, 2009 2:29 pm Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Sob Avg 29, 2009 3:49 pm Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.78
|
Objavljeno: Pon Avg 31, 2009 12:27 pm Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Pon Avg 31, 2009 1:20 pm Naslov sporočila: |
|
|
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!
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 |
|
 |
sundancer Član

Pridružen-a: Ned 08 Avg 2004 22:30 Prispevkov: 374 Aktiv.: 1.57 Kraj: Ljubljana
|
Objavljeno: Pon Sep 07, 2009 10:57 pm Naslov sporočila: |
|
|
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
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 |
|
 |
|
|
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: 11 dni
Powered by phpBB © 2001, 2005 phpBB Group
|