13. juni 2001 - 09:34Der 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
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).
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> 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
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.
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.
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å.
Jo vel kan man så og mange tak for hjælpen, jeg har delt pointene ligeligt
/Morten
Synes godt om
Ny brugerNybegynder
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.