Avatar billede nop Nybegynder
03. juni 2004 - 13:37 Der er 9 kommentarer og
1 løsning

Hide form giver fejl.

Jeg ville gemme formen, osse fra taskbaren, og fandt masser af hjlæp på google.
Men jeg kan ikke lave hide'en i min formActivate, hvor jeg tester på forskelligt og vil gemme formen hvis der ikke er en speciel tilstand.
Delphi giver fejlen; cannot change visible in onShow/onHide bla. bla.
Er en formActivate da en onShow på bunden?
Jeg vil altså have at programmet ved opstart tester og evt gemmer sig. Og en ticker synes at være en dirty løsning.
--nop
Avatar billede dkn Nybegynder
03. juni 2004 - 13:45 #1
application.ShowMainForm :=false;

kan du også køre fra din project fil
Avatar billede nop Nybegynder
03. juni 2004 - 13:50 #2
i formActivate:

begin
    if not isSOrunning then begin
        hide; //det giver fejl
        exit;
    end;
...
end;

hvis jeg bruger application.showmainForm:=false; istedet for sker der ingenting.
dkn>>hvad mener du helt nøjagtigt
Avatar billede pellelil Nybegynder
03. juni 2004 - 13:56 #3
I stedet for at "hide" direkte, så prøv at sende en PostMessage til formen selv.
Avatar billede dkn Nybegynder
03. juni 2004 - 13:57 #4
ved ikke lige om du har brugt den rigtig så, er det din mainform?

ellers prøv med win api:
ShowWindowAsync(hwndOwner, SW_HIDE);

ved bare du ikke kan hide din form under activate som den også siger.
Du har ikke mulighed for at flytte din kode ellers til inden formen bliver loaded?
Avatar billede nop Nybegynder
03. juni 2004 - 14:07 #5
ShowWindow(Application.MainForm.Handle, SW_HIDE);

Virker faktisk, men den gemmer ikke taskbar iconet. Hvordan gør man det?

Hvis jeg bare laver en knap der kun laver: hide;
Så gemmes både formen og taskbar iconet, det vil jeg have.
Avatar billede dkn Nybegynder
03. juni 2004 - 14:14 #6
oki, men det her er altså bedre, og det virker fint nok for mig:

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.ShowMainForm:=False;
  Application.Title:='';
  Application.CreateForm(TForm1, Form1);
  Application.MainForm.Visible:=False;
  Application.Run;
end.
Avatar billede nop Nybegynder
03. juni 2004 - 14:17 #7
dkn>>jeg kan ikke se at du har to tilstande 1: hiden, 2: shown.
Men din ide med at flytte koden kan jeg måske bruge.
Jeg vil lige prøve med en timer, det er vis let nok.
Avatar billede nop Nybegynder
03. juni 2004 - 14:21 #8
Det her virker faktisk, for jeg får flyttet hide'en ud fra formActivate.
Timeren er sat op til; interval=1, enabled=false, fra start af.

i form activate:
...
    if not isSOrunning then begin
        timer1.Enabled:=true;
        exit;
    end;
...
procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
    timer1.Enabled:=false;
    hide;
end;

Andre gode bud?????
Avatar billede dkn Nybegynder
03. juni 2004 - 14:21 #9
ingen timere da, nu må du lige holde engang.... :D

I din DPR Projekt fil:

  Application.Initialize;
  Application.ShowMainForm:=False;
  Application.Title:='';
  Application.CreateForm(TForm1, Form1);
  Application.Run;



I din form oncreate:

procedure TForm1.FormCreate(Sender: TObject);
begin
  if true then // det som nu skal tjekes
  begin
    Application.ShowMainForm := true;
  end;
end;



det kan da ikke være lettere...
Avatar billede nop Nybegynder
03. juni 2004 - 14:35 #10
dkn>> nej det behøves ikke at være svært d:)
Og din løsning virker osse dog skal jeg alligevel flytte noget kode ud efter for jeg tester om en bestemt service kører aller først, og giver en msg hvis ikke og terminerer, det har jeg gjort som det første i formActivate for så kan jeg jo kalde close! Men enten skal det så flyttes (close virker jo ikke i formCreate) eller så skal jeg bruge application.terminate (vist nok)
Tak for hjælpen.
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