Vytvaranie a pracovanie s komponentou za behu programu – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vytvaranie a pracovanie s komponentou za behu programu – Delphi – Fórum – Programujte.comVytvaranie a pracovanie s komponentou za behu programu – Delphi – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Sid^0
Newbie
12. 4. 2007   #1
-
0
-

ak si pocas behu programu vytvorim napr. memo
with tmemo.Create(self) do
begin
name:=nazov;
...
..
end;
nazov je urceny pocas behu....ako s tym memom mozem pracovat napr. vlozit text pri kliknuti na button ?

Nahlásit jako SPAM
IP: ...–
Reklama
Reklama
Jan Škrášek
~ Redaktor
+1
Boss
12. 4. 2007   #2
-
0
-

no tak mas to trochu spatne..... dela se to asi nasledovne:



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
memo: TMemo;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
memo.Lines.add('pokus');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
memo := TMemo.create(self);
with memo do begin
Parent := form1;

Left := 20;
Top := 10;
end;
end;

end.

Nahlásit jako SPAM
IP: ...–
http://jan.skrasek.com@hrachcz – webdeveloper
Sid^0
Newbie
12. 4. 2007   #3
-
0
-

nj ale majme predpoklad ze neviem ako sa to memo bude voalt.......a bude ich viac napr 5 jak to vyriesit? (pocet vytvaranych komponent nieje pevny)

Nahlásit jako SPAM
IP: ...–
Jan Škrášek
~ Redaktor
+1
Boss
12. 4. 2007   #4
-
0
-

pomoci pole.... s memo. zvladas dynamicka pole?

Nahlásit jako SPAM
IP: ...–
http://jan.skrasek.com@hrachcz – webdeveloper
Jura
~ Anonymní uživatel
634 příspěvků
13. 4. 2007   #5
-
0
-

Nebo pouzit TObjectList a o dealokaci se nemusis starat. Navic se s nim pracuje prakticky stejne jako s pole, plus ma dalsi vychytavky.-

Nahlásit jako SPAM
IP: ...–
Sid^0
Newbie
13. 4. 2007   #6
-
0
-

ee nerobim stym dlho......ale staci priklad a rad sa naucim :)

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
634 příspěvků
13. 4. 2007   #7
-
0
-

To Sid^:

Chces priklad na dyn. pole nebo na ten TObjectList?

Nahlásit jako SPAM
IP: ...–
Sid^0
Newbie
13. 4. 2007   #8
-
0
-

Sid^ píše:#
# ak si pocas behu programu vytvorim napr. memo#
#with tmemo.Create(self) do#
# begin#
# name:=nazov;#
# ...#
# ..#
# end;#
#nazov je urceny pocas behu....ako s tym memom mozem pracovat napr. vlozit text pri kliknuti na button ?

Sid^ píše:#
# nj ale majme predpoklad ze neviem ako sa to memo bude voalt.......a bude ich viac napr 5 jak to vyriesit? (pocet vytvaranych komponent nieje pevny)



no neviem ktory sposob bude lepsi na vyriesenie tohto

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
634 příspěvků
13. 4. 2007   #9
-
0
-

Z hlediska pohodlnosti, bych se priklanel k TObjectListu(aspon se neumusis starat o realokaci):



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Contnrs, StdCtrls; // TObjectList

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure MojeProceduraNaKlikMema(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
Mema: TObjectList;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
Mema :=TObjectList.Create;

end;

procedure TForm1.Button1Click(Sender: TObject);
var memo : TMemo;
begin
memo := Tmemo.Create(Self);
memo.Parent := form1;
memo.Top := random(ClientHeight); // jen tak
memo.Left := random(ClientWidth);
memo.Name := 'Memo'+IntToStr(Mema.Count+1);// vygenuruje nazev
memo.OnClick := MojeProceduraNaKlikMema; // jen pro ilustarci - pri kliku na memo vygenuje novou barvu fontu
// pridani
Mema.Add(memo);
end;

procedure TForm1.MojeProceduraNaKlikMema(Sender: TObject);
begin
TMemo(Sender).Font.Color := RGB(random(256), random(256), random(256)); // zmeni barvu fontu
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree; // vsechno uvolni
end;

end.

Nahlásit jako SPAM
IP: ...–
Sid^0
Newbie
13. 4. 2007   #10
-
0
-

thx a teraz ak predpokladam ze vygenerovany nazov mema nieviem (to sa urci pocas programu) a chcem snim v programe pracovat ako sa k nemu vratim ? napr. vygeneruju sa mi v programe 3 mema s nazvami napr. text1 text2 tex3 a ja chcem do mem pridavat text,pracovat snimi, jak nato? :)

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
634 příspěvků
14. 4. 2007   #11
-
0
-

A co takhle si je zkusit najit?? pisu to z hlavy:



function FindMemoByName(const aList: TObjectList; const aName: String): Integer;
var i: Integer;
begin
Result := -1;
for i:=0 to aList.Count-1 do
if(TMemo(aList[i]).Name = aName) then begin
Result := i;
exit;
end;
end;

Pokud nenajde memo o zadanem nazvu, vrati -1, jinak jeho index v poli.

Nahlásit jako SPAM
IP: ...–
michal0
Newbie
14. 4. 2007   #12
-
0
-

pridávaj ich do dynamického poľa, a potom k ním vieš pristúpiť...

unit Unit1;


interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ComboBox1: TComboBox;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i,vrch:integer;
pole: array of Tedit;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
setlength(pole,i);
pole[i-1]:=Tedit.Create(self);
pole[i-1].Parent:=Form1;
pole[i-1].left:=20;
pole[i-1].top:=vrch;
inc(i);
vrch:=vrch+20;
Combobox1.items.add(inttostr(i-1));
end;

procedure TForm1.FormShow(Sender: TObject);
begin
i:=1;
vrch:=10;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
pole[combobox1.itemindex].Text:='ahoj';
end;

end.

tu som to síce robil s editom. Do commboboxu sa vždy pridá nová položka pri vytvorení editu a ktorú položku zvolíš, ten edit sa vyplní. Robil som to pre niekoho iného, ale je to v podstate to čo potrebuješ ty.

Nahlásit jako SPAM
IP: ...–
Sid^0
Newbie
15. 4. 2007   #13
-
0
-

THX chalani toto som potreboval. Podstatu mam uz si to len upravim do podoby aku potrebujem. :*

Nahlásit jako SPAM
IP: ...–
Sid^0
Newbie
16. 4. 2007   #14
-
0
-

btw preco pri

procedure TForm1.Button1Click(Sender: TObject);

begin
setlength(pole,i);
pole[i-1]:=Tedit.Create(self);
pole[i-1].Parent:=Form1;
pole[i-1].left:=20;
pole[i-1].top:=vrch;
inc(i);
vrch:=vrch+20;
Combobox1.items.add(inttostr(i-1));
end;


ak do procedury vlozim riadok
pole[i-1].text:='neaky text'; 

tak to vyhodi chybu, co stym ak potrebujem priamo v tej procedure vlozit text?

Nahlásit jako SPAM
IP: ...–
pkubicek
~ Anonymní uživatel
11 příspěvků
16. 4. 2007   #15
-
0
-

Není jednoduší použít FindComponent? Mě to přijde úplně nejsnadnější.. a je to na jeden řádek.

Nahlásit jako SPAM
IP: ...–
Sid^0
Newbie
17. 4. 2007   #16
-
0
-

kvoli comu mi pocas behu programu nechce menit richedit farbu? ak mam



pole[combobox1.itemindex].SelAttributes.Color:=clred;

vobec farbu nezmeni
pritom napr


pole[combobox2.itemindex].Color:=clred;

funguje

Nahlásit jako SPAM
IP: ...–
michal0
Newbie
17. 4. 2007   #17
-
0
-

pole[combobox1.itemindex].SelAttributes.Color:=clred;
mení farbu označeného textu. Máš ten text označený?

Nahlásit jako SPAM
IP: ...–
Sid^0
Newbie
17. 4. 2007   #18
-
0
-

teda oznaceneho?. ked som si to skusal tak to slo tak ze som zmenil a pisalo to cervenou zmenil som pomocou colordialog a pokracoval som v pisani inou farbou. Takto to potrebujem :/ bez oznacovania textu proste pokracovat vo vkladani textu ale inou farbou

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Konec běhu programu — založil Polarski

Zrychleni behu programu — založil VeverkaVeveri

Zastaveni behu programu — založil Tom@sQo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý