Avatar billede futterama Nybegynder
09. februar 2005 - 13:04 Der er 4 kommentarer

Dynamiske komponenter på en QuickReport

Hej,

Jeg har et problem med at sætte caption på dynamisk oprettede labels på en QuickReport ved BeforePrint.

Min QR har en detailband hvor der skal være 20 labels, og ved BeforePrint bliver disses caption udfyldt med data fra en database. Det virker fint hvis jeg placerer alle 20 labels på min form, men jeg vil gerne oprette dem runtime.
Jeg får dog en fejl "Access violation at address..."

Jeg opretter mine labels sådan i FormCreate:

var
  newLabel: TQRLabel;
...
  for i := 1 to 21 do
  begin
    newLabel := TQRLabel.Create(DetailBand);
    TControl(newLabel).Parent := DetailBand;
    newLabel.Name := 'QRLabel' + IntToStr(i);
    newLabel.Caption := '';
  end;

Og vil ved BeforePrint sætte caption:

var
  sr: Boolean;
  i, LabelNr: Integer;
  LabelName: String;
...
  sr := Query.FindFirst;
  while sr do
  begin
    LabelNr := Query.Fields[1].AsInteger;
    LabelName := 'QRLabel' + IntToStr(LabelNr);
    TQrLabel(FindComponent(LabelName)).Caption := Query.Fields[0].AsString;
    sr := Query.FindNext;
  end;

Men ved TQrLabel(FindComponent(LabelName)) opstår der en access violation - som om label'en ikke findes på formen. Og jeg er sikker på at LabelNr er mellem 1 og 21.

Det duer ikke at oprette komponenterne ved BeforePrint pga. måden detailbanden virker.

Håber der er nogle forslag derude. På forhånd tak.
Avatar billede stone Forsker
09. februar 2005 - 13:47 #1
bare et skud i tågen...

men har du defineret placeringen af dine dynamiske labels?
Avatar billede futterama Nybegynder
09. februar 2005 - 14:21 #2
Ja, det har jeg, jeg klippede det ud for overskueligheds skyld. Desuden burde de bare komme frem på position 0,0 - det gør knappen i hvert fald ved denne kode:

procedure TForm1.FormCreate(Sender: TObject);
var
  MyButton : TButton;
begin
  MyButton := TButton.Create(Form1);
  with MyButton do
  begin
    Parent := Form1;
    Caption := 'Click me';
  end;
end;
Avatar billede futterama Nybegynder
09. februar 2005 - 14:34 #3
Mit kodeeksempel kræver åbenbart at der er en Button på formen i forvejen...
Avatar billede futterama Nybegynder
09. februar 2005 - 14:36 #4
Heh, man lærer noget nyt hver dag, min kode med MyButton kræver bare at StdCtrls findes i Uses listen :-D
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