Nope, desværre ikke - men de har den nok på biblioteket, den omfatter den mest brugte programmering, derefter er du mere rystet til selv at løre noget, du kan evt. også kikke i de seneste blade fra K-Computer for alle.
blackthorne>>Jeg er helt "grøn" Dvs. vil gerne lære de mere generalle ting. Eks linke (eller hvad det nu end hedder i en progamørs verden) t forms sammen, så når man trykker på en knap kommer der en nyt windue frem!
Jeg har før programmeret lidt i Turbo Pascal og det skulde ikke ligge så langt væk fra Delphi. For Turbo Pascal (og ASp gor den sags skyld) lærte jeg mest ved at kigge på koder, men det har ikke rigtigt lykkedes for mig ved Delphi!!
PROCEDURE TForm1.Button1Click (Sender : TObject); BEGIN ShowForm; END
PROCEDURE ShowForm; BEGIN TRY Form1 := TForm1.Create(Application); // Opretter den nye form Form1.ShowModal; // Viser den nye form modalt FINALLY Form1.Release // Looper alle messages igennem, før END; // før formen hukommelse frigives END;
Husk at delphi ikke skal autocreate dine forms( dvs fjern createform i project filen)
ellers oprettes der 2 forms og det vil give dig problemer
Det vil ikke give problemer, hvis variablen Form1 er oprettet som en lokal variabel i proceduren ShowForm. Delphi opretter godt nok en automatisk Form1 variabel i Form1's unit, så det er måske smartere at anvende et andet navn, alá:
Procedure ShowForm; Var MyForm : TForm1; // Husk at have TForm1's unit i uses sætningen. Begin Try MyForm := TForm1.Crea.... ... End; End;
hvis man først har bestemt at benytte dynamisk oprettelse af forms, så skal der aldrig autocreates de forms der også bliver oprette dynamisk. Ellers allokere du dobbelt så meget hukommelse. Desuden vil der gå ged i forskellige komponenter. f.eks. DB controller som kan risikere at pege til dataset i den autocreated form, og ikke den dynamisk created form. (Denne type problemer er meget svære at gennemskue)
Der er ikke noget problem i at benytte den allerede erklæret form variable, den behøver ikke at være lokal
Hmm, Da jeg prøvede (har ikke noget med de 2 overstående scripts at gøre) hunde jeg ikke få det til at virke. Kan det have nøget med at gøre, at jeg kun skrev i kode, og ikke oprettede de 2 forms via menuer i delphi!!
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); begin Showform; //[Error] Unit1.pas(28): Undeclared identifier: 'Showform' end procedure Showform; //[Error] Unit1.pas(30): ';' expected but 'PROCEDURE' found begin try form1 := Tform1.Create(Application); Tform1.ShowModla; //[Error] Unit1.pas(34): Undeclared identifier: 'ShowModla' finally Tform1.Release; //[Error] Unit1.pas(36): This form of method call only allowed for class methods end; end. //[Error] Unit1.pas(38): ';' expected but '.' found //[Error] Unit1.pas(40): Declaration expected but end of file found //[Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'
--Script End--
Har det noget med lokal variabler & lokal form's at gøre!! Fattede ikke så meget af hvad i sage!!
Hvordan/hvorfor skal et tryk på en button, der er placeret på Form1 (hvilket jo logisk må indebære at Form1 ER synlig), få Form1 til at blive created og vist - ja, jeg spør' bare.... :)
Gozar> Alle alm. programmer vil ha' en standard form, der vises når programmet startes. Normalt kaldes denne form for Form1. Når du i Delphi laver en ny/endnu en form, som så default får navnet Form2, så vil denne nye form ikke blive vist, hvis du ikke gør noget specielt for netop at få den vist (med et kald til Show eller ShowModal). I din project fil vil du se, at alle dit programs forms (default) bliver oprettet (created) for dig, men det er altså kun den allerførste i listen der vil være synlig. For at vise en af de andre forms, fx. Form2, skal du tilføje noget kode. Her bliver Form2 vist, hvis der trykkes på en button:
Procedure TForm1.Button1Click(Sender: TObject); Begin Form2.ShowModal; End;
Har du fortalt Delphi, at den ikke skal autocreate Form2 (hvilket der iøvrigt sjældent er grund til), så skal du oprette og fjerne den før/efter brug. Dette er som vist i tidligere eksempler.
Med ovenstående mener jeg, at der sjældent er grund til, at fortælle Delphi, at den IKKE skal oprette forms for dig. Den memory og tid det kræver at oprette forms nå applicationen startes er som regel uden den store betydning - I hvertfald hvis de pågældende forms ikke lave connections til databaser mv., hvilket KAN tage lidt lang tid.
Jeg har bedt delphi om ikke at oprette visse forms for mig, da jeg havde kommandoer liggende i oncreate :), de kunne self. ligge andre setder, bare et eks.
Jeps, men placere man den slags kode i OnCreate så er man jo altså også selv lidt udenom det. Alternativet er at ligge det i OnActivate (fx.), evt med en "tæller", således at det kun køres en gang - men det er jo logik for perlehøns.... :)
(PS: Når det nu hedder en høne, to høns. Hvorfor hedder det så ikke en hane, flere hans....)
Nu var eksemplet kun demo af hvordan man gør det teknisk. Jeg er helt uenig med dig omkring at lade delphi autocreate formsene, fordi du overallokere en masse hukommelse for de forms der ikke er åbne. Det er griset at en program benytter 20 mb hukommelse hvis det kan nøjes med 2 mb.
Jeg udvikler professionale programer med op til 100 forms, så ville det ikke være uprofessionelt at autocreate 100 forms fra start. jeg har skulle vedligeholde programmer med ca. 50 forms der blev autocreated hvor det tog ca 2-3 minuter at starte exe filen indtil jeg lavede det om.
blackthorne> Du har ret i at i store prg. er det ikke godt med autocreat, men gozar begynder næppe med et prg med >5 forms, derfor lad os ikke forvirre ham mere end nødvendigt.
gozar> Start med en ny application. opret en ny form (form2). Tilføj en button til form1. Dobbeltklik på button1. Skriv mellem begin og end; : "form2.show;". Tilføj "unit2" til uses (øverst i scorce).
og luk så dette spg., som jo oprindeligt var om bøger/koder/...
mora> ja, ja, men er det nemmere? og formålet var også ikke at forvire gozar mere end højest nødvendigt. Endvidre arbejder jeg med D5 og var ikke sirker på om D4 virkede på samme måde. Min metode virker på alle delphi (delpåhi, hvis du foretrækker det) versioner.
OK, stavningen var ikke så fed, men jeg syndes det er nemmere, men det er fedt også at kende teknikken bag det, jeg bruger det da jeg ofte arbejder med mange forms der linker frem og tilbage, derved opnår jeg at skulle trykke ok, en gang pr. link, i stedet for at skrive dem i alle forms, det kunne selvføldgi være fedt at kunne fastsætte en uses for alle forms, men jeg klarer mig skam med at klikke ok :)
~MORA~
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.