Avatar billede assassin Juniormester
29. oktober 2002 - 10:56 Der er 12 kommentarer og
1 løsning

Onclick på knapper

Jeg sidder lige med et problem, og så er dette jo det rette sted at henvende sig:

Jeg opretter x antal knapper dynamisk, og nu er mit spørgsmål:
Hvordan får jeg tildelt en onclick på knapperne.
Knapperne skal vise et billede når der bliver trykket, men det er ikke det samme billede hver knap skal vise, det afhænger af værdien af i.
Håber det er forståeligt


var
  StartTop := 33;
  YDiff    := 25;
  For i := 1 to StrToInt(ReadRegKey('Antal billeder')) do
  begin
    bBtn          := TButton.Create(Self);
    bBtn.Name    := 'dBtn'+ IntToStr(i);
    bBtn.Caption  := 'Vis billed';
    bBtn.Width    := 50;
    bBtn.Left    := 560;
    bBtn.Top      := StartTop-3;
    InsertControl(bBtn);

    inc(StartTop, YDiff);
  end;
end;

MVH Dennis
Avatar billede diz Nybegynder
29. oktober 2002 - 11:10 #1
du opretter selv en metode i din klasse som skal se således ud :

procedure MitEgetKlikEvent(sender : TObject);
begin
  //her skal der stå hva der sker når man trykker på knappen
end;

Og så tilføjer du linjen lige efter du har oprettet den

bBtn.OnClick := AktivitetKlik;

så skulle den være der
Avatar billede diz Nybegynder
29. oktober 2002 - 11:14 #2
Du kan også gemme 'i' i knappens tag :

bBtn.tag := i;

Så har du altid værdien liggende sammen med knappen og kan gøre :

  if bBtn.tag = 2 then

osv
Avatar billede assassin Juniormester
29. oktober 2002 - 11:16 #3
Den sidste løsning er ikke rigtigt brugbar, da jeg har mulighed for at oprette op til 50 knapper. :-)
Jeg ser lige på den første løsning.
Avatar billede diz Nybegynder
29. oktober 2002 - 11:28 #4
hvordan henter du dine billeder ind? Det var faktisk her jeg mente tag kunne bruges. feks hvis du henter dem fra en fil

procedure MitEgetKlikEvent(sender : TObject);
begin
  //her skal der stå hva der sker når man trykker på knappen
  filnavn := 'billede' + inttostr(sender.tag);
end;
Avatar billede assassin Juniormester
29. oktober 2002 - 11:35 #5
Ok, så misforstod jeg det.
Jeg får fejl i nedenstående linie:
filnavn := 'billede' + inttostr(sender.tag);
Fejlen er: undeclared identifier
Avatar billede diz Nybegynder
29. oktober 2002 - 11:37 #6
det er fordi du ikke har erklæret filnavn som en string...

procedure MitEgetKlikEvent(sender : TObject);
var
  filnavn : String;
begin
  //her skal der stå hva der sker når man trykker på knappen
  filnavn := 'billede' + inttostr(sender.tag);
end;
Avatar billede diz Nybegynder
29. oktober 2002 - 11:41 #7
Ups det er mig der sover....dette skulle virke

procedure MitEgetKlikEvent(sender : TObject);
var
  filnavn : String;
begin
  if sender is TButton then
  begin
    with sender as TButton do
    begin
      filnavn := 'billed' + inttostr(tag);
    end;
  end;
end;
Avatar billede assassin Juniormester
29. oktober 2002 - 11:41 #8
Jeg gemmer navnene på  billederne i en inifil.
[1]
Billede 1
[2]
billede 2
....
og henter dem ind på følgende måde

procedure TFrmStat.MitEgetKlikEvent(sender : TObject);
var
  IniFil : TIniFile;
begin
  IniFil := TIniFile.Create(ExtractFilepath(Application.Exename)+'Loesning.ini');
  Image1.Picture.LoadFromFile(Main.EdtDirectory.Text+'\'+
                              IniFil.ReadString(IntToStr(sender.tag),
                                                copy('Løsning',pos('=','Løsning')+1,Length('Løsning')),
                                                ''));
  IniFil.Free;
end;
Avatar billede assassin Juniormester
29. oktober 2002 - 11:43 #9
Rettelse:
[1]
Løsning=Billede 1
[2]
Løsning=billede 2
Avatar billede diz Nybegynder
29. oktober 2002 - 11:43 #10
virker det?
Avatar billede assassin Juniormester
29. oktober 2002 - 11:47 #11
SMUKT.
Ja, det virker rigtigt godt.
Send et svar, så får du points.
1000 tak for hjælpen.
Avatar billede diz Nybegynder
29. oktober 2002 - 11:50 #12
svar.

ps. Kan du ikke bruge :

billede := inifil.ReadSectionValues(inttostr(i),'løsning');

istedet for at skulle kopiere osv.
Avatar billede assassin Juniormester
29. oktober 2002 - 12:00 #13
jeg kan ikke umiddelbar bruge
Image1.Picture.LoadFromFile(Main.EdtDirectory.Text+'\'+inifil.ReadSectionValues(inttostr(tag),'løsning'));
da readsectionValues returnere TStrings og LoadFromFile forventer string
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