Avatar billede kennethv Nybegynder
22. februar 2007 - 15:23 Der er 18 kommentarer og
1 løsning

Udfører et OnEvent på en komponent.create(self)

Hvordan laver/kalder/fanger et OnEvent på en komponent som er oprette med en "Create(self)"?

Jeg vil gerne "fange" et OnEvent på en memo, når indholdet er ændret.

PFT
Avatar billede kroning Nybegynder
22. februar 2007 - 16:44 #1
Der findes en OnChange event der kaldes hver gang der ændres, er det det du mener?
Avatar billede stone Forsker
22. februar 2007 - 17:08 #2
memo1.Modified

fanger ændringer i Memo
Avatar billede kennethv Nybegynder
22. februar 2007 - 17:43 #3
Kroning: Ja, det er det event.

Hvordan skal man "fange" det, hvis komponenten er oprette dynamisk?
Avatar billede kroning Nybegynder
22. februar 2007 - 18:00 #4
Du tildeler blot f.eks. OnChange en værdi samtidig med at du opretter Memoen.

with TMemo.Create(self) do
begin
  Onchange:=MemoChange;
  .
  .
  .
end;
Avatar billede kennethv Nybegynder
22. februar 2007 - 18:10 #5
Hvad er MemoChange og hvordan kalder man den så? Det er SynEdit jeg bruger.
Avatar billede kennethv Nybegynder
22. februar 2007 - 18:16 #6
Det jeg egentlig forsøger er, at oprette, på en pagecontrol, et faneblad med en SynEdit. Jeg har fået klaret det med at oprette faneblad dynamisk, men mangler den del med OnChange.
Det jeg har lavet ser sådan ud:
procedure TForm1.New1Click(Sender: TObject);
Var
  SynEdit1 : TSynEdit;
begin
  ATabSheet := TTabSheet.Create(PageControl1);
  with ATabSheet do
  begin
    PageControl := PageControl1;
    Caption := 'Untitled'+IntToStr(count);
    inc(count);
    ImageIndex := 0;
  end;
  PageControl1.ActivePage := ATabSheet;
  SynEdit1 := TSynEdit.Create(ATabSheet);
  SynEdit1.Parent := ATabSheet;
  SynEdit1.Align := alClient;
end;
Avatar billede kroning Nybegynder
22. februar 2007 - 18:46 #7
Hvis SynEdit også har en OnChange event så tilføjer du:

SynEdit1.OnChange:=MinOnChange;

MinOnChange skal se således ud hvis det er en TMemo, det er muligvis det samme med SynEdit:

procedure TForm1.MinOnChange(Sender: TObject);
begin
// blabla
end;
Avatar billede kroning Nybegynder
22. februar 2007 - 18:49 #8
Husk at du kan bruge den samme MinOnChange procedure til alle dine SynEdit´s, hviken SynEdit der kalder finder du ud af ved at bruge Sender:

(Sender as TSynEdit).???
Avatar billede kennethv Nybegynder
22. februar 2007 - 18:51 #9
total iorden. Jeg prøver lige lidt senere.
Avatar billede kennethv Nybegynder
23. februar 2007 - 00:31 #10
Det ser ud til at det spiller. Tak for det.

Lige til sidst.

Jeg kunne godt tænke mig at ændre ikonet på TabSheet når det aktive TabSheet med den tilhørende SynEdit ændre sig. Jeg har gjort dette her med succes, men kunne godt tænke mig at vide om det er den "rigtige" måde at gøre det på.

  TTabSheet(TSynEdit(sender).Owner).ImageIndex := 1;
Avatar billede kroning Nybegynder
23. februar 2007 - 06:55 #11
Hvis det virker så er det jo fint, men jeg ville nok gøre det således:
PageControl.ActivePage.ImageIndex:=1;

TPageControl har også en OnChange event man kan bruge:
Fra hjælpen: "Occurs after a new tab is selected."
Avatar billede kroning Nybegynder
23. februar 2007 - 06:55 #12
Svar
Avatar billede kennethv Nybegynder
24. februar 2007 - 00:12 #13
Hvad havde du i tankerne omkring at TPageControl har også en OnChange event man kan bruge?

Skulle det være istedet for SynEdit's OnChange?
Avatar billede kennethv Nybegynder
24. februar 2007 - 00:22 #14
En anden lille ting. Hvis man nu laver 5 fanebladet med en SynEdit på hver, hvordan finder man ud af om der er lavet en ændring på SynEdit? Jeg tænker på at man skal blive spurgt om man vil gemme indhold hvis der er blevet ændret noget i SynEdit på det aktive faneblad?
Avatar billede kroning Nybegynder
26. februar 2007 - 15:45 #15
OnChange på TPageControl kunne du bruge til at sætte ImageIndex
Der findes en Modified værdi du kan checke for at se om der er foretaget ændringer.
Dvs.

If SynEdit.Modified then
// skal der gemmes?
Avatar billede kennethv Nybegynder
26. februar 2007 - 20:35 #16
Er det for alle uanset hvilken?
Avatar billede kroning Nybegynder
27. februar 2007 - 08:00 #17
SynEdit.Modified er for den enkelte, hvis det er hvad du mener. Men hvorfor prøver du ikke bare?
Avatar billede kennethv Nybegynder
01. marts 2007 - 10:48 #18
Det kan du tro at jeg vil. :) Men vil gerne lige forstå hvordan dt hænger sammen. Jeg vil bruge en popmenu på fanebladet, (det har jeg fundet ud af), men på den vil jeg så gerne have fat i det faneblad som jeg vil lukke. Skal man så først finde det aktive faneblad og når man så har gjort det, finde ud af om SynEdit er ændret?
Avatar billede kroning Nybegynder
01. marts 2007 - 17:33 #19
Ja, finde det aktive faneblad, brug PageControl.ActivePage, og check så SynEditens Modified verdi.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester