Avatar billede morten_s Nybegynder
13. juni 2001 - 09:34 Der er 8 kommentarer og
3 løsninger

Struktur

Jeg programmere i øjeblikket på en applikation som indeholder flere delelementer.

De forskellige programelementer har jeg delt op på forskellige PageControl sider.

Hvad jeg finder træls er at alt koden kommer i samme unit som som min hovedform. Er det ikke muligt at omdiregere koden til forskellige unit\'s så feks kode for \"Page1 \" kommer i unit 1 og kode for \"page2\" i unit 2 osv.

og det er selvfølgelig den kode som Delphi autogenerere der skal komme i de respektive units, eller hvis det er muligt at flytte koden per \"håndkraft\" vil jeg også gerne vide hvordan
Avatar billede pellelil Nybegynder
13. juni 2001 - 09:38 #1
Sagde nogen \"Frames\" ?  :-)

Jeg vil tro du kan indsætte en Frame i et TabSheet. En frame har sin egen unit (som du vil opnå).
Avatar billede pellelil Nybegynder
13. juni 2001 - 09:46 #2
Jeg prøvede lige... Det er ikke noget problem at insætte frame\'s i en TabSheet. En Frame oprettes (i Delphi 5) ved at du vælger \"File->New Frame\". I din TabSheet skal du indsætte din Frame og det gør du ved at vælge det første komponent i \"Standard\" (komponent-\"fanebladet\"). Dernæst klikker du i det TabSheet hvor du vil bruge din Frame (og der vises en oversigt over de \"Frames\") du har tilrådighed.

I de enkelte frames indsætter du de komponenter du vil have til at fremkomme i dine TabSheets (en frame pr. TabSheet).
Avatar billede delphi Nybegynder
13. juni 2001 - 10:17 #3
Jeg skal lige forstå dit spørgsmål ordentligt:

Har du
  A: mere end en page control på din mainform, som dækker samme område, men blot er \'visible\' afhængigt af situationen, eller har du
  B: kun en page control, der så har en masse pages, som du, af overskuelighed hensyn, ønsker kontroleret fra forskellige units?


Hvis A, så anbefaler jeg at du bruger flere forms.
Hvis B: så er der ingen særlige problemer.  Hver unit, der bruger dine page control, skal have en reference til den form der \'ejer\' page controlen.  Du vil se\'følig få det problem, at alle event metoder, der er knyttet til controls i din page control, dvs. Buttons, listboxes mv., SKAL være defineret på/i samme form som den hvor pagecontrolen er placeret i.... men de behøver jo kun indeholde en enkelt linie - nemligt et kald af en metode/procedure i en anden unit.

Delphi
Avatar billede morten_s Nybegynder
13. juni 2001 - 10:36 #4
Delphi>
Jeg har en opbygning som din B, og jeg ved godt hvordan man referere mellem de forskellige units, det som irretere mig er netop at de af delphi autogenererede events m.m. kommer i hoved unit, også selvom jeg skal nøjes med en enkelt linie til kald i en anden unit
Avatar billede martinlind Nybegynder
13. juni 2001 - 10:50 #5
Frames er det smarteste, du kan også bruge form\'s hvis du kører en ældre version af delphi, du sætter bare Form\'ens Parent property til den WinControl du vil vise ( tegne ) den i, da parent er den der bestemmer hvor din Ctrl bliver tegnet, modsat Owner, der drejer sig om delphi\'s comp.

/Martin
Avatar billede delphi Nybegynder
13. juni 2001 - 11:36 #6
Den kommer du ikke rigtigt uden om.... og dog...

En event procedure er såvidt jeg husker defineret som:

OnSomeEvent = Procedure(parameterliste) of Object;

Med andre ord, så kan du sætte en event pointer til at pege på en vilkårlig procedure såfremt denne er 1: En object metode og 2: har den korrekte parameter liste.

Det må lige afprøves.....


(5 min senere)

Jo, det virker!  Se her:

Lav en form med en button.

Lav derefter en ny tom unit (File->New og vælg så Unit i box\'en)

Jeg fyldte den derefter med følgende kode:

unit Unit2;
interface

Type
  TUnit2Class = Class(TObject)
    Public
      Constructor Create;
      Procedure DummyProc(Sender: TObject);
  End;

var
  Unit2Object : TUnit2Class;

implementation

Uses
  Dialogs;  // Pga. ShowMesage call;

{ TUnit2Class }

constructor TUnit2Class.Create;
begin
  Inherited;
  // Add you own initialization code here..
end;

procedure TUnit2Class.DummyProc(Sender: TObject);
begin
  ShowMessage(\'TUnit2Class.DummyProc.\')
end;


Initialization
  Unit2Object := TUnit2Class.Create;

Finalization
  Unit2Object.Free;

End.


Derefter går du tilbage til din form og laver følgende OnCreate metode:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.OnClick := Unit2Object.DummyProc;
end;

(husk iøvrigt \"Uses Unit2\")


Som du ser har jeg nu lavet en unit2, som indeholder en decleration for en Class, der indeholder en metode, der har samme \"form\" som en TButton.OnClick metode (Nedarvet fra TControl som: property OnClick: TNotifyEvent read FOnC etc. etc.  Som det ses er der altså i dette tilfælde tale om en TNotifyEvent.  Andre event typer, fx. TMouseEvent, er defineret rundt omkring i Delphi RTL sourcen.)

Denne class er der så lavet en instance af, kaldet Unit2Object. 
I formens Create metode sætter jeg min buttons OnClickEvent til at pege på Unit2Objects DummyProc metode og alt kører bare.

Du må kunne lave noget tilsvarende, således at du fx. i din forms OnCreate metode binder relevente control events til object metoder defineret i ander units.

Delphi
Avatar billede martinlind Nybegynder
13. juni 2001 - 12:25 #7
Man kan også benytte sig af en simpel \"uses MyUnit1;\" så kan man fint ref. form\'s og comps i MyUnit1 :

MyForm1.Button1.Click;


/Martin
Avatar billede delphi Nybegynder
13. juni 2001 - 12:41 #8
Sefølig kan man det, men det ændrer jo ikke på kerne punktet i Mortens spørgsmål: Han vil have lagt hans control\'s even rutiner ud af den unit, hvori control\'sne er defineret.  At benytte \'Uses  MyUnit1\' mv. vil blot kalde nogle event rutiner fra hans form - det er det modsatte han vil opnå.


Delphi
Avatar billede morten_s Nybegynder
14. juni 2001 - 10:19 #9
Frame ser ud til at være den rigtige metode, men jeg synes ikke rigtig jeg kan \"nå\" mine komponenter på de enkelte Frames fra hovedunit.

F.eks har jeg en listbox på en af framesne som skal fyldes ved opstart.

Men hovedformen kender ikke elementerne på den pågældende Frame

Og i Use unit listen findes det pågældende Frame ikke så jeg kan lave en sammenknytning ?
Avatar billede morten_s Nybegynder
14. juni 2001 - 10:23 #10
Jo vel kan man så mange tak for hjælpen til pellelil, Martin og delphi
Avatar billede morten_s Nybegynder
14. juni 2001 - 10:24 #11
Jo vel kan man så og mange tak for hjælpen, jeg har delt pointene ligeligt

/Morten
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

IT-JOB

Capgemini Danmark A/S

Client Partner

Carl Ras A/S

Digital Tech Lead

Fælles AI

AI Lead

Netcompany A/S

Network Engineer