15. juli 2005 - 14:03Der er
18 kommentarer og 1 løsning
Hvordan anvender man showmessage
For at mit program det wirker skal jeg kalde showmessage(); for at alle dens event bliver kaldt - sådan ser det ud ihvertfald. Hvordan kalder man showmessage(); eller noget andet som det gør det samme - uden at man får den bedsked på skærmen - mit program er plalagt til at kører minimeret ?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg forstår ikke spørgsmålet, formålet med showmessage er vel at give besked på skærmen så hvad mener du med kode som gør det samme men uden at vise noget på skærmen, det giver jo ingen mening?
Jeg kører et consolprogram til comporten - for at den wirker skal den have en showmessage() til at afbryde programmet - mit program kører i tray - skal polle en folder - jeg har ikke brug for en besked på skærmen - jeg mangler kode som gør det samme som showmessage - men uden at vise noget på skærmem.
Så du vil altså have det sådan at man kan trykke på en knap (f.eks. ESC) for at afbryde programmet? Hvis det er det så skal du bare kunne på OnKeyDown eller OnKeyPress event´ene.
Det er noget med en messagehandler - som overtager styringen når man kalder shovmessage - den messagehandler skal så foranlede at der ikke kommer noget på skærmen.
procedure TfrmMain.FormCreate(Sender: TObject); begin Application.OnException := HandleException;
with ComboPortNum do ItemIndex := Items.IndexOf('3'); with ComboBaudrate do ItemIndex := Items.IndexOf('br19200'); with ComboDataBits do ItemIndex := Items.IndexOf('db8'); with ComboParity do ItemIndex := Items.IndexOf('paNone'); with ComboStopbits do ItemIndex := Items.IndexOf('sb10');
//ComboBaudrate.ItemIndex + 1 //Make sure we skip the brUser flag in TVaBaudRate
procedure TfrmMain.HandleException(Sender: TObject; E: Exception); begin if E is EVaCommError then with E as EVaCommError do ShowMessage(Message); end;
procedure TfrmMain.ButtonOpenClick(Sender: TObject); begin VaComm1.Open; Comm1Cts(VaComm1); Comm1Dsr(VaComm1); Comm1Ring(VaComm1); Comm1Rlsd(VaComm1); end;
procedure TfrmMain.ButtonCloseClick(Sender: TObject); begin VaComm1.Close; Comm1Cts(VaComm1); Comm1Dsr(VaComm1); Comm1Ring(VaComm1); Comm1Rlsd(VaComm1); end;
procedure TfrmMain.ButtonResetClick(Sender: TObject); begin Memo1.Lines.Clear; Memo2.Lines.Clear; end;
procedure TfrmMain.ButtonTransmitClick(Sender: TObject); var S: string; Ok: Boolean; J:integer; begin
S :=Chr(11)+EditTransmit.Text; for j:=1 to Length(S) do VaComm1.WriteText(Chr(Ord(s[j])));
if CheckBoxAddLinefeed.Checked then S := S + #13#10;
if not Ok then Memo1.Lines.add('Error writing to: ' + Format('Port %d', [VaComm1.PortNum])) else Memo1.Lines.add(Format('Writing %d characters', [Length(S)])); end;
procedure TfrmMain.Comm1TxEmpty(Sender: TObject); begin Memo1.Lines.add('TxEmpty signal detected...'); end;
procedure TfrmMain.Comm1Break(Sender: TObject); begin Memo1.Lines.add('Break signal detected...'); end;
procedure TfrmMain.Comm1Cts(Sender: TObject); begin if VaComm1.CTS then StatusBar1.Panels[0].Text := 'CTS' else StatusBar1.Panels[0].Text := ''; end;
procedure TfrmMain.Comm1Dsr(Sender: TObject); begin if VaComm1.DSR then StatusBar1.Panels[1].Text := 'DSR' else StatusBar1.Panels[1].Text := ''; end;
procedure TfrmMain.Comm1Ring(Sender: TObject); begin if VaComm1.Ring then StatusBar1.Panels[2].Text := 'RING' else StatusBar1.Panels[2].Text := ''; end;
procedure TfrmMain.Comm1Rlsd(Sender: TObject); begin if VaComm1.Rlsd then StatusBar1.Panels[3].Text := 'RLSD' else StatusBar1.Panels[3].Text := ''; end;
procedure TfrmMain.Comm1Error(Sender: TObject; Errors: Integer); begin if (Errors and CE_BREAK > 0) then Memo1.Lines.add(sCE_BREAK); if (Errors and CE_DNS > 0) then Memo1.Lines.add(sCE_DNS); if (Errors and CE_FRAME > 0) then Memo1.Lines.add(sCE_FRAME); if (Errors and CE_IOE > 0) then Memo1.Lines.add(sCE_IOE); if (Errors and CE_MODE > 0) then Memo1.Lines.add(sCE_MODE); if (Errors and CE_OOP > 0) then Memo1.Lines.add(sCE_OOP); if (Errors and CE_OVERRUN > 0) then Memo1.Lines.add(sCE_OVERRUN); if (Errors and CE_PTO > 0) then Memo1.Lines.add(sCE_PTO); if (Errors and CE_RXOVER > 0) then Memo1.Lines.add(sCE_RXOVER); if (Errors and CE_RXPARITY > 0) then Memo1.Lines.add(sCE_RXPARITY); if (Errors and CE_TXFULL > 0) then Memo1.Lines.add(sCE_TXFULL); end;
/////////////////////////////////////////////////////////////////////////////////// // // // Herunder er de constanter, der kan benyttes til at teste om ting skal udføres // // // ///////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////// // // // Slut på constanter for test // // // ///////////////////////////////////////////////////////////////////////////////////
// rettet til at godtage ændringer gemt i ini fil Var ServerDrev : String = 'D:'; ServerScriptDir : String = 'D:\Server\Data-Telefonanlaeg\AutoDelphi-HH';
/////////////////////////////////////////////////////////////////////////////////// // // // Herunder er de funktioner der sætter menu-punkter og gemmer i fil/henter // // // // Udbygget til at gemme paramtre og hente dem igen // // // ///////////////////////////////////////////////////////////////////////////////////
procedure HentAlleSelections; Var Hvor : String; Hvad : String; Fil : tIniFile; Begin Hvor:=ExtractFileDir(ParamStr(0)); Hvad:=ExtractFileName(ParamStr(0)); While Hvor[Length(Hvor)]='\' Do Hvor:=Copy(Hvor,1,length(Hvor)-1); Hvor:=Hvor+'\'+ChangeFileExt(Hvad,'.ini'); Fil:=TIniFile.Create(Hvor); Try // Herfra hentes parametre ServerDrev :=Fil.ReadString('Parametre','ServerDrev',ServerDrev); // benyt oprindelig som deafult ServerScriptDir :=Fil.ReadString('Parametre','ServerScriptDir',ServerScriptDir); // benyt oprindelig som deafult Finally Fil.Free; End; End;
procedure GemAlleSelections; Var Hvor : String; Hvad : String; Fil : tIniFile; Begin Hvor:=ExtractFileDir(ParamStr(0)); Hvad:=ExtractFileName(ParamStr(0)); While Hvor[Length(Hvor)]='\' Do Hvor:=Copy(Hvor,1,length(Hvor)-1); Hvor:=Hvor+'\'+ChangeFileExt(Hvad,'.ini'); Fil:=TIniFile.Create(Hvor); Try // Herfra gemmes paramtre Fil.WriteString('Parametre','ServerDrev',ServerDrev); Fil.WriteString('Parametre','ServerScriptDir',ServerScriptDir); Finally Fil.Free; End; End;
Procedure SetAlleSelections; Begin End;
/////////////////////////////////////////////////////////////////////////////////// // // // Slut på gem, hent og sæt funktioner // // // ///////////////////////////////////////////////////////////////////////////////////
Procedure Fejlmeld(fejltekst:String); // Denne routine kan kaldes med evt. fejlmeddelelser, for at disse kan // blive vist på skærmen. Begin Application.MessageBox(pChar(fejltekst),'Hesselholt Fisk Eksport A/S', MB_OK or MB_ICONWARNING); End;
Procedure TestRout; // denne routine kaldes hver gang testene skal udføres. I denne skal du // lave alle de funktioner du ønsker at udføre. Begin // den følgende linie er bare for at vise at der sker noget. // Fjern den i det rígtige program. Fejlmeld('Der er udført en test'#13#10'Denne meddelelse kommer'#13#10+ 'kun fordi dette er en test'); End;
procedure TFormFaktServ.zTrayIcon1AskEndSession(var DoEnd: Boolean); begin // Hvis denne sættes til "false" vil programmet nægte at lade // Windows lukke ned DoEnd:=True; end;
// Læs selections HentAlleSelections; // Sæt alle selctions SetAlleSelections;
// Sørg for at der testes med det ømskede mellemrum TimerForTest.Interval:=TidMellemTest; // Sørg for at timeren kalder hver gang tiden er gået TimerForTest.Enabled:=True;
SplashForm.FRee; end;
procedure SendText(Fn: string); var S : string; KnStr:Array[1..9] of string; FraFil:TextFile; Lin,j:Integer; Ok:Boolean;
begin
// FormFaktServ.VaComm1.Open;
// Ok:=FormFaktServ.VaComm1.WriteText(Chr(11));
// FormFaktServ.VaComm1.Close;
// s :='chabnr:33039,099999999,1;'+#13 +#10; // for j:=1 to Length(S) do frmMain.VaComm1.WriteText(Chr(Ord(s[j]))); // s:=frmMain.VaComm1.ReadText; (* AssignFile(FraFil,Fn); {$I-} Reset(FraFil); {$I+} Lin:=1; While Not Eof(FraFil) do Begin Readln(FraFil,knstr[Lin]);Inc(lin); end;//While CloseFile(FraFil); DeleteFile(Fn);
Ok:=frmMain.VaComm1.WriteText(Chr(11));
For Lin:=1 to 9 do begin s :=knstr[lin]+#13 +#10; for j:=1 to Length(S) do frmMain.VaComm1.WriteText(Chr(Ord(s[j]))); s:=frmMain.VaComm1.ReadText; end; end; *)
end;
Function ScpFundet(FromDir,FilExt:PathName;Var Filnavn:String):Boolean; Label Stop; begin ScpFundet:=False; FindError:=FindFirst(FromDir+'\*.'+FilExt,faArchive,Dirinfo); If FindError<>0 Then Goto Stop; Filnavn:=FromDir+'\'+Dirinfo.name; ScpFundet:=True; Stop: FindClose(DirInfo); end;
procedure TFormFaktServ.zShowApp1AskEndSession(var DoEnd: Boolean); begin // Hvis denne sættes til "false" vil programmet nægte at lade // Windows lukke ned DoEnd:=True; end;
procedure TFormFaktServ.Lukprogram1Click(Sender: TObject); begin // Lukke programmet igen Close; end;
procedure TFormFaktServ.TimerForTestTimer(Sender: TObject); var Fnavn:string; begin // hertil komme systemet hver gang testen skal udføres. Denne // Rourtine vil kalde vores egen testroutine // Først sørges der for, at der ikke kan startes en ny test før // den første test er udført. TimerForTest.Enabled:=False; // Dernæst kaldes test routinen
OpenPort; If ScpFundet(ServerScriptDir,'scp',Fnavn) Then SendText(Fnavn);
// TestRout; // Og til slut, sørger vi for, at der igen kan kaldes ved næste // udløb af tid.
TimerForTest.Enabled:=True; end;
procedure TFormFaktServ.Indstilparamtre1Click(Sender: TObject); var FormIndstil: TFormIndstil; begin // her indstilles parametre for programmet FormIndstil:=TFormIndstil.Create(Self); Try With FormIndstil Do begin // Her tilføjes de enkelte data til den form hvor indstillingerne udføres ComboBox1.ItemIndex:=Ord(ServerDrev[1])-65; // En nem beregning til at finde nummeret på drevet Edit1.Text:=ServerScriptDir; End; If FormIndstil.ShowModal=mrOK Then Begin // bruger klikkede på OK, så vi skal bruge de nye oplysninger With FormIndstil Do Begin // Her flyttes data tilbage efter rettelserne ServerDrev[1]:=Chr(ComboBox1.ItemIndex+65); // En nem måde at omregne til et drev fra valgt item
uses Forms, TlfMain in 'TlfMain.pas' {FormFaktServ}, TlfInBox in 'TlfInBox.pas' {FormIndstil}, TlfAbout in 'TlfAbout.pas' {AboutBox}, TlfSplashForm in 'TlfSplashForm.pas' {SplashForm}, formMain in 'formMain.pas' {frmMain};
Er problemet ikke blot, at du tror dine events ikke bliver kaldt, fordi du ikke får skrevet noget i memo'en - som du gør når du indsætter en showmessage?
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.