Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: Formin kanssa ongelmia

NanoSoft [08.04.2006 00:44:20]

#

Tein uuden Delphi-projektin ja nimesin formin FrmMain:iksi ja yritin tallentaa projektin noh sitten alkoi tulla valituksia siitä, että on jo sellainen formi kuin FrmMain kun yritin tallentaa sen omalla nimellään (onko tämä joku bugi vai tarkoituksella tehty tyhmästi), sitten tein formille txteditin ja nimesin sen TxtPass:iksi. Kun olin ohjelmoinut ja yritin kokeilla ohjelmaa niin tuli virhe ikkuna, jossa luki, että FrmMain:ia ei löydy. Eli Miten sen saa sitten tallennettua taikka jollakin tavalla toimimaan?

Metabolix [08.04.2006 11:05:16]

#

Tuosta ei nyt oikein selvinnyt, minkä tiedostoista yritit tallentaa nimellä FrmMain. Mutta joka tapauksessa ajatuksena on, että projektitiedosto tallennetaan projektin nimellä ("Laskin"), form on tallennettu omalla nimellään (FrmMain) ja moduuli (unit) nimetään jotenkin muuten (vaikkapa FrmMainUnit).

Tämä ei ole tyhmästi tehty. Tämä on aivan samanlainen asia kuin se, että et voi määritellä useampaa samannimistä muuttujaa. Pascalista löytyy kolme erilaista sanaryhmää, joita ei voi käyttää muuttujien niminä: kielen sanat (begin, end, if...), tyyppien nimet (Integer, String, TForm...) ja moduulien nimet. Kuten huomaat, jos lisäät projektiisi uuden moduulin ja lisäät sen uses-listaan, pääset käsiksi siinä määriteltyihin asioihin moduulin nimen avulla: Unit2.Muuttuja. Moduulin nimi on yleensä sama kuin sen tiedostonimi.

NanoSoft [08.04.2006 15:03:32]

#

aijaa, luulin, että se unit ja form on samoja asioita, mutta siinä tapauksessa jos ne kerta eivät ole niin minun delphini ei tallenna sitä formia ollenkaan tai ei se ainakaan kysyny missään vaiheessa sen tallennusnimeä eikä sitä löydy mistään

NanoSoft [08.04.2006 17:30:52]

#

unit passlockunit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, math;

procedure sijoita_txtpass;

type
  TFrmMain = class(TForm)
    TxtPass: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmMain: TFrmMain;

implementation

procedure sijoita_txtpass;
var
  fw,fh,tw,th,ty,tx : integer;
begin
	fw := frmmain.Width;
  fh := frmmain.Height;
  tw := frmmain.txtpass.Width;
  th := frmmain.txtpass.Height;
  tx := (fw div 2) - (tw div 2);
  ty := (fh div 2) - (th div 2);

  frmmain.TxtPass.Left := tx;
  frmmain.TxtPass.Top := ty;
end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
sijoita_txtpass;
end;

end.

Tossa on koko koodin pätkä, formin nimi on FrmMain, txtboxin nimi on TxtPass, unitin Passlockunit ja projektin nimi on Passlock ja virheenä tulee aina, että formia FrmMain ei löydy eli miten korjaan sen?

---------------------------
Debugger Exception Notification
---------------------------
Project passlock.exe raised exception class EResNotFound with message 'Resource TFrmMain not found'.
---------------------------
Break Continue Help
---------------------------

->Continue->

---------------------------
Application Error
---------------------------
Exception EResNotFound in module passlock.exe at 0004754C.

Resource TFrmMain not found.


---------------------------
OK
---------------------------

NanoSoft [09.04.2006 11:00:49]

#

Hahaa, tajusin ite mikä siinä oli vikana... sen implementationin jälkeen on pakko laittaa tämmönen kommentti {$R *.dfm}

Metabolix [09.04.2006 18:20:33]

#

Arvelinkin, että tuo voisi olla se puuttuva. Miksi ihmeessä olet alun perin edes poistanut sen? Sehän tulee automaattisesti uutta formia luodessa.

Se ei ole kommentti vaan esikääntäjän komento, joka käskee liittää kaikki .dfm-päätteiset tiedostot resursseiksi. Esikääntäjänkomennot ovat Pascalissa muotoa {$komento} tai vanhaan tapaan (*$komento*). Teoriassa niillä on mahdollista tehdä aivan samalla tavalla kaikkea kuin C:ssä esikääntäjällä, mutta Pascalissa on tapana käyttää oikeita funktioita ja vakioita makrojen sijaan.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta