Avatar billede micki Nybegynder
01. august 2000 - 11:16 Der er 7 kommentarer og
1 løsning

Problemer med notebook

Hej alle Delphi-eksperter.

Jeg skal oprette en masse Images \"runtime\". Mit problem er at de skal
oprettes i en notebook og også gerne på en special \'side\' af notebooken.

Min kode ser således ud:

var
  Billeder : array[0..15] of TImage;

procedure TMainForm.OpretImages;

  var
    I : Integer;

begin
  for i := 0 to 15 do
  begin
    Billeder[i] := TImage.Create(MainForm);
    Billeder[i].Parent := MainForm;
    Billeder[i].Picture.Bitmap.LoadFromFile(\'billede\' + IntToStr(i) +
\'.bmp\');
    Billeder[i].AutoSize := True;
    Billeder[i].Left := 0;
    Billeder[i].Top := i*34;
  end;
end;


Hvad gør jeg galt?
Jeg bruger D5
Avatar billede pellelil Nybegynder
01. august 2000 - 11:34 #1
Det er vel \"bare\" et spørgsmål om at det skal være den enkelte NoteTab der skal stå som \"ejer\" af dit TImage, altså \"Billeder[i] := TImage.Create(xxxxx);\"

Eller hyr ?
Avatar billede micki Nybegynder
01. august 2000 - 11:51 #2
Mener du:

Billeder[i] := TImage.Create(MainForm.Notebook1);

?? For det virker ikke!
Avatar billede pellelil Nybegynder
01. august 2000 - 12:31 #3
Nej Din NoteBook kan i teorien ikke \"eje\" (visuelle) componenter. Du skal indsætte dit TImage direkte på \"den side\" hvor den skal bruges (denne skal være \"owner\", så husk også at sætte TImage.Parent). Jeg har netop lige fyret op i min Delphi så jeg er sikker på at jeg kalder tingende ved deres rigtige navne.

På formen har jeg indsat en TPageControl, og i denne har jeg oprettet (via højre-mus/\"New page\") 2 \"sider\" (TTabSheet). Det er på disse \"sider\" du skal indsætte dine TImages. Jeg har ikke ændre på de navne som Delphi foreslår så i mit tilfælde hedder den første side: \"TabSheet1\" (og den anden hedder \"TabSheet2\").

Nedenstående kode indsætter et billede (fra default W2K DK installationen)
<SNIP>
procedure TForm1.FormCreate(Sender: TObject);
var
  Billede : TImage;
begin
  Billede := TImage.Create(TabSheet2);
  Billede.Parent := TabSheet2;
  Billede.Picture.Bitmap.LoadFromFile(\'c:\\winnt\\Fjerstruktur.bmp\');
  With Billede do begin
    AutoSize := True;
    Left := 10;
    Top  := 10;
  end;
end;
</SNIP>


PS Det er testet og det virker fint, billedet kommer på \"den anden side\" (TabSheet2) ganske som jeg forventede det skulle.
Avatar billede micki Nybegynder
01. august 2000 - 13:15 #4
Jeg skal bruge en TNotebook.

Jeg kan ikke bruge en TPageControl og TTabSheet.

Medmindre at man kan skjule TPageControlen.

Help me!

PS: Jeg har forhøjet fortjenelsen til 100 point.
Avatar billede pellelil Nybegynder
01. august 2000 - 14:02 #5
Det var straks værre da jeg ikke har brugt denne siden D1/D2 (og som de selv skriver: \"Notebook components are frequently used with tab set controls (TTabSet) to let the user select pages in the notebook by clicking a tab.  TNotebook is provided for BACKWARD compatibility. New applications SHOULD use TPageControl instead\").

Men nu hvor du alligevel HAR brugt den, så dykkede jeg ind i Borlands Source (ExtCtrls.Pas). En TNotebook indeholder variablen \"FAccess\" som indeholder \"dens sider\", og det er denne du skal bruge for at få kunne indsætte dine componenter (i dit tilfælde TImage). Desværre er FAccess en privat variable der på ingen måde gøres public. Ligeledes så bruger TNoteBook internt en classe der hedder TPageAccess (heri \"gemmes\" de enkelte sider). Denne classe er defineret i unitens \"implementation-section\", og er derfor ikke brugbar \"fra din side\".

DESVÆRRE du har ikke med de forhåndenværende resourcer IKKE mulighed for at bruge en TNotebook til dit formål. Hvis du alligevel vil så er du nødt til at omskrive Borlands TNoteBook til at give dig de muligheder du har, men i sidste ende er det nok nemmere \"bare\" at bruge en TPageControl.

Avatar billede micki Nybegynder
01. august 2000 - 14:37 #6
Ok... kan du så ikke fortælle hvordan man skjuler en PageControls faneblade 100% så den kan virke stort set ligesom en TNoteBook... så får du sq de 100 point
Avatar billede pellelil Nybegynder
01. august 2000 - 15:06 #7
Ja nu har du jo give mig point\'ene så må jeg jo hellere udføre det \"betalte\" arbejde (jeg så at du ikke havde større held på \"dk.edb.programmering.pascal\").

Du starter med at \"sige\" at alle tabs skal gøre usynlige:
<SNIP>
for i := 0 to PageControl1.PageCount-1 do
    PageControl1.Pages[i].TabVisible := False;
</SNIP>

Dernæst (for at vælge aktive side), skriver du bare: \"PageControl1.ActivePage := TabSheet2;\"

Thats it !!!
Avatar billede micki Nybegynder
01. august 2000 - 15:15 #8
Takker!!
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