[elektro-etc] Delphi kérdés
Friedrich Gábor
igazifido at t-online.hu
Thu Dec 6 07:53:33 CET 2007
Kösz mindkettőtöknek a választ. Info válaszából már kiderült, hogy hol a
hiba, tömbösíteni fogom a Memo-kat, mert később is majd együtt kell kezelnem
őket.
Köszi
Fidó
----- Original Message -----
From: "Papp Zoltán" <zombi at c2.hu>
To: <elektro-etc at tesla.hu>
Sent: Wednesday, December 05, 2007 11:26 PM
Subject: Re: [elektro-etc] Delphi kérdés
> 2007.12.05. 19:10:25 dátumon Friedrich Gábor <igazifido at t-online.hu> írta:
>
>> Sziasztok!
>> Formon van 8 Memo, a progi indításakor mind a 8 memo szövegét törölni
>> szeretném, valahogy így:
>>
>> procedure TForm1.FormActivate(Sender: TObject); //vagy akár FormCreate..
>> var
>> x: byte;
>> begin
>> for x:=1 to 8 do Memo[x].Text:='';
>> end;
>>
>> Erre azt mondja, hogy Undeclared Identifier: 'Memo'.
>> Amúgy ha egyenként hivatkozok rá (Memo1.Text:='') akkor működik.
>> Mi a gond?
>> Előre is köszi.
>> Üdv
>> Fidó
>
> Hali!
>
> Ha programozás közben a Form létrehozásakor kijelölöd a Memox ojjektumot,
> és az "Object Inspector"-ban a "Lines" paraméter végén lévő pici gombócra
> ráböksz, akkor tudod szerkeszteni a Memo induláskori tartalmát. Ha ezt itt
> kitörlöd, akkor üresen fognak létrejönni a Memó-id.
>
> Ha törölni akarsz egy Memo-t, akkor: Memox.Lines.Clear; avagy még
> egyszerűbben: Memox.Clear; (ez a
>
> Ha viszont tömbként akarsz hivatkozni rájuk, akkor a következőt teheted:
> 1)
> Létrehozod a 8 Memot, Memo1, Memo2, ... Memo8 néven.
> A Form-od "private" deklarációjában csinálsz pl. egy ilyet:
> Memos: array[1..8] of TMemo;
> Ezzel létrehozol egy objektum tömböt. (Valójában csak mutatókat
> definiálsz)
>
> Majd a Form-od OnCreate eseményéhez rendelt eljáráson belül
> (alapértelmezésben: TForm1.FormCreate):
> Memos[1]:=Memo1;
> Memos[2]:=Memo2;
> ...
> Memos[8]:=Memo8;
>
> Ezzel a tömb-mutatóid a 8 Memora fognak mutatni.
>
> Innentől kezdve a Memo1-re hivatkozhatsz Memos[1] névvel is.
> pl.: Memos[1].Clear;
>
> 2)
> A Memo-kat te hozod létre a programon belül és nem a
> vizuális-szerkesztőben:
> Egyszerű példa: csinálj egy új projektet, mentsd el a unitot "memosu.pas"
> néven, a projektet "memos.dpr" néven.
> A Form1-et állítsd be kb. 850x250-es méretre.
> Másold be itt a lenti cuccot a memosu.pas-ba:
>
> //=======================================
> unit memosu;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
> Forms,
> Dialogs, StdCtrls;
>
> type
> TForm1 = class(TForm)
> procedure FormCreate(Sender: TObject);
> procedure MemosOnClick(Sender: TObject); //esemény a Memos-hoz
> private
> Memos: array[1..8] of TMemo;
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.dfm}
>
> procedure TForm1.FormCreate(Sender: TObject);
> var i:byte;
> begin
> for i:=1 to 8 do
> begin
> Memos[i]:=TMemo.Create(Form1); //Memo lefoglalása a memóriában
> with Memos[i] do
> begin
> Parent:=Form1; //ez a Memo a Form1-hez tartozik
> Left:=i*100-92; //koordináták és méretek beállítása
> Top:=8;
> Width:=92;
> Height:=150;
> TabOrder:=i; //Tabulátor-sorrend
> OnClick:=MemosOnClick; //ha ráklikkentünk, akkor a MemosOnClick
> eljárás hívása
> end;
> end;
> end;
>
> procedure TForm1.MemosOnClick(Sender: TObject);
> var Memox:TMemo;
> begin
> Memox:=TMemo(Sender); //Memox fog arra a Memo-ra mutatni, amelyik
> meghívta az eljárást, sajna a "typecasting" muszáj
> Memox.Lines.Add('Click'); //innentől kezdve a Memox-el érjük el az adott
> objektumot
> end;
>
> //=======================================
>
> A program létrehoz 8 Memo-t egymás mellett, 92x150-es mérettel.
> Ezekre későbbiekben hivatkozhatsz Memos[i] névvel.
> Ha külön-külön akarsz esemény-eljárásokat beállítani, akkor a fenti
> példában pl. a Memos[i].OnClick eseményre hozz létre külön eljárásokat.
> Ha egyben akarod kezelni az eseményeket az összes Memo-n, akkor a fenti
> példa az irányadó.
> Ott látod azt is, hogyan lehet úgy munkát végeztetni a Memo-kkal, hogy azt
> sem tudod, melyik hívta meg az eljárást.
> Ha meg akarod tudni, vagy annak megfelelően egy eljáráson belül több
> dolgot elvégezni, akkor így módosíthatod a MemosOnClick eljárást:
>
> procedure TForm1.MemosOnClick(Sender: TObject);
> var i:byte;
> begin
> for i:=1 to 8 do
> if Sender=Memos[i] then
> Memos[i].Lines.Add('Click'+IntToStr(i));
> end;
>
> Így az i-be kerül a meghívó Memo "sorszáma"
>
>
> Remélem nem volt túl bonyolult.
>
> Üdv
> --
> Papp Zoltán
> OneWay Electronics - www.onewayelectronics.hu
> Hangszerviz - www.hangszerviz.hu
>
More information about the Elektro-etc
mailing list