Newsgroup: it.comp.software.newsreader
Titolo: [Dialog] Errore durante l'esecuzione dello script

Credo di aver compilato correttamente lo script fornito da MLC, quello che
consente di controllare on-line se ci sono risposte nuove ai propri
messaggi, ho inserito il mio FQDN e il percorso della cartella dove è
salvato Dialog, però nel momento di eseguire lo script (ho inserito un
pulsante nella barra delle applicazioni in alto), mi esce un messaggio in
finestra che dice "Errore durante l'esecuzione dello script: can not import
message" - più o meno. Il programma mi dice che è correttamente compilato,
qualcuno ha qualche suggerimento?
Grazie.
-- 
Natanaele
e-mail: natanaele(at)
people.it
«Misericordia cerco, non sacrificio» Osea 6,6 / Mt 9,13
«La lettera uccide, lo Spirito dà la vita.» 2 Cor 3,6

 
Gli script sono due, uno di tipo "Script eventi" (OnBeforeSavingMessage) e
uno di tipo "Script personali" (PostShow): li hai compilati tutti e due?
Se sě ricontrolla meglio tutte le tue impostazioni in entrambi gli script.
Ciao,
-- 
Maria Luisa C - 31/03/04 15.27.48

 Se sì ricontrolla meglio tutte le tue impostazioni in entrambi gli script.
Beh, controlla tu stessa
<begin>
program OnBeforeSavingMessage;
//---------------------------- Impostazioni
---------------------------------// 
const
   filePost = 'F:\Programmi\40tude Dialog\Post.txt';
   // mettere il percorso per il file che verrà creato dallo script .
 
   myFQDN = '@
ID-108136.user.uni-berlin.de
';
   // mettere il proprio FQDN unico.
 
   depth = 4;
   // mettere la profondità voluta.
 
   ExcludeNG = '';
   // inserire (separati da virgole) i nomi completi dei newsgroup per i
quali
   // non si vuole che lo script registri le risposte.
   //Es: 'alt.discussioni.cheneso, it.litigi.senzafine, free.it.chat'
   //le virgole sono fondamentali, gli spazi intorno alle virgole non hanno
importanza. 
 
//------------------------ Fine delle Impostazioni
----------------------------// 
//(non c'è bisogno di cambiare nient'altro nello script)
function GetReferences(Message: TStringList): string;
var
   i: integer; 
   tempStr:String;
begin
  i:=0;
  result:='';
  while (i<Message.count-1) do
  begin    
   if pos('References: ', Message.Strings[i])>0 then
   begin  
tempStr:=copy(Message.Strings[i],pos('<',Message.Strings[i]),Length(Message.Strings[i])-1);
    i := i+1;
    while (i<Message.count-1) and (pos(': ',Message.Strings[i])=0) do
    begin
     tempStr:=tempStr+Message.Strings[i];
     i := i+1;
    end; //while
    break;
   end; //if
   i:=i+1;
  end; //while
  result:=tempStr;
end; 
 
function isFollowingMine(Message: TStringList): boolean;
var
  s: string;  
begin
  s:=GetReferences(Message);
  if pos(myFQDN, s)>0 then result:=true
  else result:=false;
end;
 
function WhichDepth(Message: TStringList): integer;
var
   i,c,p,thisDepth: integer;
   s,t: string;
   listFQDN: TStringList;  
begin
  thisDepth:=0;
  s:=GetReferences(Message);
  listFQDN:=TStringList.Create();
  try
   while length(s)>0 do 
   begin
    p:=pos ('>', s);
    t:=copy(s,1,p);
    listFQDN.Add(t);
    s:=copy(s,p+2,length(s)-p-1);
   end; //while
   c:=listFQDN.Count;
   i:=c-1;
   while i>=0 do
   begin
    if pos(myFQDN, listFQDN.Strings[i])>0 then
    begin
     thisDepth:=c-i;
     break;
    end; //if
    i:=i-1;
   end; //while
  finally
   listFQDN.free;
  end; //try
  result:=thisDepth;
end;
function GetMsgID(Message: TStringList): string;
var
   i: integer;
begin
  i:=0;
  result:='';
  while i<Message.count-1 do
  begin    
   if pos('Message-ID:', Message.strings[i])>0 then break;
   i:=i+1;
  end; //while 
  result:=Message.strings[i];
end; 
 
function isMine(Message: TStringList): boolean;
var
   mid: string;   
begin
  mid:=GetMsgID(Message);
  if pos(myFQDN, mid)>0 then result:=true
  else result:=false;
end;
function GetMessageFrom(Message: TStringList): string;
var
   i: integer;
begin
  i:=0;
  result:='';
  while i<Message.count-1 do
  begin    
   if pos('From:', Message.strings[i])>0 then break;
   i:=i+1;
  end; //while
  result:=Message.strings[i];
end;
function GetMessageNG(Message: TStringList): string;
var
   i, p: integer; 
   tempStr:String;
begin
  i:=0;
  p:=0;
  result:='';
  while (i<Message.count-1) do
  begin 
   p:=pos('Newsgroups: ', Message.Strings[i]); 
   if p>0 then
   begin  
    tempStr:=copy(Message.Strings[i],p+12,Length(Message.Strings[i])-11);
    i := i+1;
    while (i<Message.count-1) and (pos(': ',Message.Strings[i])=0) do
    begin
     tempStr:=tempStr+Message.Strings[i];
     i := i+1;
    end; //while
    break;
   end; //if
   i:=i+1;
  end; //while
  result:=tempStr;
end; 
function isExcludedNG(s: string): boolean;
var
  i, j, c1, c2, p: integer;
  temp, t: string;
  found: boolean;
  listNG, listExcNG: TStringList;
begin
  listNG:=TStringList.Create();
  listExcNG:=TStringList.Create();
  temp:='';
  t:='';
  found:=false;
  try
   temp:=s;
   while pos(',', temp)>0 do 
   begin
    p:=pos(',', temp);
    t:=copy(temp,1,p-1);
    listNG.Add(t);
    temp:=copy(temp,p+1,length(temp)-p);
   end; //while
   listNG.Add(temp);
   temp:=trim(ExcludeNG);
   while pos (',', temp)>0 do 
   begin
    p:=pos (',', temp);
    t:=copy(temp,1,p-1);
    listExcNG.Add(t);
    temp:=trim(copy(temp,p+1,length(temp)-p));
   end; //while
   listExcNG.Add(temp);
   c1:=listNG.Count;
   c2:=listExcNG.Count;
   i:=0
   while (i<c1) and (not found) do
   begin
    for j:=0 to c2-1 do
    begin
     if listNG.Strings[i]=listExcNG.Strings[j] then
     begin
      found:=true;
      break;
     end; //if
    end; //for j
    i:=i+1;
   end; //while
  finally
   listNG.free;
   listExcNG.free;
  end; //try
  result:=found;
end;
function GetMessageSubject(Message: TStringList): string;
var
   i: integer;
begin
  i:=0;
  result:='';
  while i<Message.count-1 do
  begin    
   if pos('Subject:', Message.strings[i])>0 then break;
   i:=i+1;
  end; //while
  result:=Message.strings[i]; 
end;
function GetMessageDate(Message: TStringList): string;
var
   i: integer;
begin
  i:=0;
  result:='';
  while i<Message.count-1 do
  begin    
   if pos('Date:', Message.strings[i])>0 then break;
   i:=i+1;
  end; //while
  result:=Message.strings[i]; 
end;
procedure OnBeforeSavingMessage(var Message: TStringlist; Servername:
string; IsEmail: boolean);
var
  inf, ns, cod, sep, indent, ng: string;
  list: TStringList;
  num,d,i: integer;
begin
  ng:=GetMessageNG(Message);
  if not(isMine(Message) or IsEmail or isExcludedNG(ng)) then 
  //è um post non mio in un NG non escluso
  begin
   num:=0;
   list := TStringList.Create();
   try
    d:=WhichDepth(Message);
    if (isFollowingMine(Message) and (d<=depth)) then  //è una risposta
entro la profondità
    begin
     sep:=StringOfChar('-', 50);
     if fileexists(filePost) then
     begin
      list.LoadFromFile(filePost);       
      for i:=0 to list.Count-3 do       
       if pos(sep, list.strings[i])<>0 then num:=num+1;
     end;  //trovato il numero delle note esistenti
     ns:=IntToStr(num+1);
     if Length(ns)=1 then cod:='[0'+ns+']' else cod:='['+ns+']';
     indent:=StringOfChar(' ', 3*d);
     inf:=sep+cod+sep+#13+#10+indent+' P=' +IntToStr(d)+'  -  ' +
GetMessageFrom(Message);
     inf:=inf+'  -  '+'NG:
'+GetMessageNG(Message)+#13+#10+indent+GetMessageSubject(Message);
     inf:=inf+'  -
'+GetMessageDate(Message)+#13+#10+indent+GetMsgID(Message)+#13+#10;
     list.Add(inf);
     list.SaveToFile(filePost);
    end; //if
   finally
    list.Free;
   end; //try
  end; //if
end;
begin
end.
</end>
<begin>
Program PostShow;
uses Forms, StdCtrls;
//---------------------------- Impostazioni
---------------------------------//
const
  filePost = 'F:\Programmi\40tude Dialog\Post.txt';
  // mettere il proprio percorso, lo stesso che compare in
OnBeforeSavingMessage.
 
  withSound = true;
  // un suono quando si apre il memo? true / false.
  soundFile = 'C:\windows\media\chimes.wav';
  // mettere il proprio percorso e il suono preferito.
 
  fColor = clGreen;
  // colore del font; altre possibilità sono: 
  // clAqua, clBlack, clBlue, clDkGray, clFuchsia, clGray, clLime,
clLtGray,
  // clMaroon, clNavy, clOlive, clPurple, clRed, clSilver, clTeal, clWhite,
clYellow. 
 
  wBGcolor = clWhite;
  // colore dello sfondo; fare riferimento ai colori precedenti.
 
  wWidth = 800;
  // larghezza della finestra, in pixel.
 
  wHeight = 600;
  // altezza della finestra, in pixel.
 
  fName = 'Verdana';
  // nome del font; si può cambiare con un altro presente nel sistema:
  // fare riferimento a "Impostazioni generali-Vista" per l'elenco dei font
disponibili.
 
  fSize = 10;
  // grandezza del font.
 
  fItalic = false;
   // testo in corsivo?  true / false
 
  fBold = false;
   // testo in grassetto?  true / false
 
//-------------------------- Fine Impostazioni
-------------------------------// 
//(non c'è bisogno di cambiare nient'altro nello script)
//----------------------------- Info ---------------------------------//
 {Quando il memo è visualizzato puoi fare le seguenti cose:
 * cancellare tutta la lista (col pulsante "Reset");
 * cancellare una nota (facendo doppio clic sul suo numero e premendo il
pulsante "Canc Nota");
 * andare al messaggio (facendo doppio clic sul suo Message-ID e 
   premendo Ctrl+V e Invio nella finestra seguente);
 * tenere la lista (col pulsante "Continua", o i tasti Invio o Esc).
 Se il memo è vuoto, chiamare PostShow non produce niente: il memo viene
visualizzato
 solo se ci sono delle note da mostrare.
 Attenzione a non cancellare le note mentre state scaricando i corpi dei
messaggi:
 potreste cancellare le nuove note che lo script sta scrivendo.}
//-------------------------- Fine delle Info
-------------------------------// 
 
var
  list: TStringList;
  num: integer;
  PostForm : TForm;
  PostMemo : TMemo;
  PostBtContinue : TButton;
  PostBtReset: TButton;
  PostBtDelNote: TButton;
 
function PlaySound(Filename: PChar; Options: LongWord): Boolean;
         external 'sndPla...@winmm.dll stdcall';
 
 
function isMIDselected(m: string): boolean;
var i: integer;
begin
 for i:=3 to PostMemo.Lines.Count-1 do
 begin
  if (pos('Message-ID:',PostMemo.Lines[i])>0) and
(pos(m,PostMemo.Lines[i])>0) 
   and (pos('<',m)>0) then
  begin
   result:=true;
   break;   
  end
  else result:=false;
 end;//for
end;
 
procedure BtPostContinueClick(Sender: TObject);
begin
  PostForm.Close;
end;
procedure BtPostResetClick(Sender: TObject);
begin
  DeleteFile(filePost);
  BtPostContinueClick(Sender);
end;
procedure CaptionForm;
begin
if num>1 then
 PostForm.Caption := 'Ci sono ' + IntToStr(num) + ' risposte:'
else
 PostForm.Caption := 'C''è una nuova risposta:';
end;
function isValid(s: string): boolean;
begin
 if (Pos(#13+#10, s)>0) or (Length(s)<100) then result:=false
 else result:=true;
end;
procedure BtPostDelNoteClick(Sender: TObject);
var
 note, s, ns, cod, sep: string;
 list: TStringList;
 i, j, n, skip: integer;
begin
 note:='';
 note:=PostMemo.SelText;
 if (note<>'') and isValid(note) then
 begin
  list := TStringList.Create();
  try
   list.LoadFromFile(filePost);
   for i:=0 to (list.Count-1) do
   begin
    if pos(note, list.Strings[i])<>0 then break;
   end;
   skip:=0;
   for j:=0 to i-1 do
    skip:=skip+Length(list.Strings[j]);
   skip:=skip+(i*2);
   PostMemo.SelStart:=skip;
   s:=PostMemo.Lines[i];
   PostMemo.SelLength:=Length(s);
   note:=PostMemo.SelText;
   for n:=i+4 downto i do list.Delete(n);
   PostMemo.Lines.Assign(list);
   num := list.Count div 5;
   CaptionForm;
   n:=list.Count;    // rinumero le note
   for i:=0 to n-4 do
   begin
    sep:=StringOfChar('-', 50);
    j:=pos('---[',list.Strings[i]);
    if j=0 then continue;
    ns:=IntToStr((i div 5)+1);
    if Length(ns)=1 then cod:='[0'+ns+']'
     else cod:='['+ns+']';
    list.Strings[i]:=sep+cod+sep; 
   end;           
   PostMemo.Lines.Assign(list);  // notes renumed
   DeleteFile(filePost);
   list.SaveToFile(filePost);   
  finally
   list.Free;
  end;
 end
 else
  begin
   note:='Per cancellare una nota, fai prima doppio clic sul suo numero.';
   Application.MessageBox(note, 'Info', 1);
  end;
end;
procedure MemoDblClick(Sender: TObject);
var
 msg: string;
begin
  msg:='';
  msg:=PostMemo.SelText;
  if (msg<>'') and (isMIDselected(msg)) then
  begin
   PostMemo.CopyToClipboard;
   Ado('FindMessageID');
   PostForm.Close;
  end;
end;
Procedure BuildForm;
begin
 PostForm := TForm.Create(nil);
 PostForm.Height := wHeight;
 PostForm.Width := wWidth;
 PostForm.position := poScreenCenter;
 PostForm.BorderStyle := bsSingle;
 PostMemo := TMemo.Create(PostForm);
 PostMemo.Parent := PostForm;
 PostMemo.Top := 10;
 PostMemo.Left := 10;
 PostMemo.Height := PostForm.ClientHeight-60;
 PostMemo.Width := PostForm.ClientWidth-20;
 PostMemo.ScrollBars := ssBoth;
 PostMemo.Color := wBGcolor;
 PostMemo.Font.Size := fSize;
 
PostMemo.Font.Name
 := fName;
 PostMemo.Font.Color := fColor;
 PostMemo.Font.Style := [];
 if fItalic then PostMemo.Font.Style := PostMemo.Font.Style + [fsItalic];
 if fBold then PostMemo.Font.Style := PostMemo.Font.Style + [fsBold];
 PostMemo.TabStop := false;
 PostMemo.ReadOnly := true;
 PostBtReset := TButton.Create(PostForm);
 PostBtReset.Parent := PostForm;
 PostBtReset.Top := PostMemo.Top+PostMemo.Height+PostBtReset.height/2;
 PostBtReset.Left := PostForm.Width DIV 2 - PostBtReset.Width-50;
 PostBtReset.Caption := '&Reset';
 PostBtReset.OnClick := @BtPostResetClick; 
 PostBtContinue := TButton.Create(PostForm);
 PostBtContinue.Parent := PostForm;
 PostBtContinue.Caption := '&Continua';
 PostBtContinue.TabOrder := 0;
 PostBtContinue.Cancel := true;
 PostBtContinue.OnClick := @BtPostContinueClick;
 PostBtContinue.Top := PostBtReset.Top;
 PostBtContinue.Left := PostBtReset.Left+80;
 PostBtDelNote := TButton.Create(PostForm);
 PostBtDelNote.Parent := PostForm;
 PostBtDelNote.Caption := '&Canc Nota';
 PostBtDelNote.OnClick := @BtPostDelNoteClick;
 PostBtDelNote.Top := PostBtReset.Top;
 PostBtDelNote.Left := PostBtContinue.Left+80;
 PostMemo.OnDblClick := @MemoDblClick;
 end;
 
procedure FillMemo;
var
 sep: string;
 i: integer;
begin
 list := TStringList.Create();
 try
  if fileexists(filePost) then
  begin
   num := 0;
   sep:=StringOfChar('-', 50);
   list.LoadFromFile(filePost);
   PostMemo.Lines.Assign(list);
   for i:=0 to list.Count-1 do
   begin       
    if Pos(sep, list.strings[i])<>0 then num:=num+1;
   end;
  end;
 finally
 list.free;
 end;
end;
Begin 
 try
  BuildForm;
  FillMemo;
  if fileexists(filePost) then
  begin                
    if withSound then PlaySound(soundFile, 1);
    CaptionForm;
    PostForm.ShowModal;
  end;
  finally
  PostForm.free;
 end;
End.
</end>


mercoledì 31/mar/2004 _Natanaele_ ha scritto:
[...]
Che cosa sono tutti quei <begin> e </end> ?
Perché ce li metti? non ci vanno assolutamente.
Tra l'altro hanno l'apparenza di tag HTML, che qui proprio non c'entra
niente. Ma come hai fatto a compilare gli altri script?
Ciao,
-- 
Maria Luisa C - 31/03/04 18.27.51

 Perché ce li metti? non ci vanno assolutamente.
Forse voleva indicare l'inizio e la fine dello script quotato,
immagino.
-- 
31.03.2004 20:39:49, daRkSidE

 immagino.
Non ci avevo pensato ^_^
Allora non so: a parte il dover sistemare il wrapping del testo, copiando e
incollando gli script dal suo post poi si compilano e si eseguono bene.
-- 
Maria Luisa C - 31/03/04 20.49.54

 immagino.
Proprio così, grazie.
Cmq il problema rimane irrisolto.
Ciao


 Se sě ricontrolla meglio tutte le tue impostazioni in entrambi gli script.
Anche se non avesse messo tutte le impostazioni, non uscirebbe
l'errore. E non credo uscirebbe nemmeno se non ha compilato gli script.
-- 
01/04/04 1.38.01, daRkSidE

 l'errore. E non credo uscirebbe nemmeno se non ha compilato gli script.
Ed allora? Cosa c'é che non va?


 
Mi dispiace, non avevo capito.
Potresti descrivere meglio come succede e il messaggio d'errore esatto?
Ciao,
-- 
Maria Luisa C - 01/04/04 9.56.18

 Potresti descrivere meglio come succede e il messaggio d'errore esatto?
Beh, ho eseguito le istruzioni scrupolosamente (mi pare), ho aggiunto il
mio FDQN e la directory esatta dove lo script va a scrivere il file
"Post.txt", gli script sono due "OnBeforeSavingMessage" e "PostShow.ds" (ho
compilato due script nuovi), ho aggiunto due pulsanti sulla barra delle
applicazioni in alto denominati come i due script, una volta che sono "on
line" vado per fare click su uno dei due - "OnBeforeSavingMassage" e mi
compare una finestra di dialogo con scritto "Errore durante l'esecuzione
dello script OnBeforeSavingMessage: Cannot import". Ecco, questo è quanto.
Mi dispiace, non riesco ad essere più preciso di così...
Ciao e grazie.


 line" vado per fare click su uno dei due - "OnBeforeSavingMassage"
No, io ho creato un solo pulsante, relativo al "PostShow" che devi
premere dopo che hai scaricato nuovi corpi di messaggi
Dove hai letto di creare un pulsante anche per quell'altro?
| Per chiamare lo script PostShow sarà utile creare per esso un pulsante 

 Ciao e grazie.
Di nulla, ciao.
-- 
Maria Luisa C - 01/04/04 12.41.02

 che hai finito di scaricare i messaggi.
Ok, ho capito.
I due script vanno in esecuzione automaticamente?
Se premo il secondo "PostShow.ds", non accade nulla, è normale?
Grazie


 
Se scarichi e compili l'ultima versione di PostShow, quando il memo è vuoto
perché non hai ancora ricevuto risposte premendo il pulsante di PostShow
senti un suono a tua scelta oppure vedi una MessageBox, a seconda delle
impostazioni che avrai messo.
Fino a ieri invece, con la versione precedente, non succedeva niente se il
memo è vuoto. Ricorda che il memo si riempie solo delle risposte a te, e non
registra i tuoi stessi messaggi.
Se vuoi l'ultima versione, basta che cambi solo PostShow.
Ti ricopio il link:
http://www.fido.altervista.org/Dialog/script.html#ps
Magari rileggiti la descrizione aggiornata (per i suoni ecc.)
-- 
Maria Luisa C - 01/04/04 12.50.56

 
http://www.fido.altervista.org/Dialog/script.html#ps
Boh, continua a non succedere nulla. :-)
Ciao


 Magari rileggiti la descrizione aggiornata (per i suoni ecc.)
Rifatto.
Adesso sento un suono "ping!" quando premo il pulsante, ma continua a non
comparirmi nessuna finestra (almeno in mancanza di messaggi, aspetto ancora
delle novità).
Ciao


 Ed allora? Cosa c'é che non va?
Je ne suis pas un /scripteur/. :-/
-- 
01.04.2004 13:00:36, daRkSidE

 Ciao
vediamo se con questa risposta finalmente ti funziona  :)
P.S. Il ping l'hai scelto tu? Perché altrimenti è il suono di errore di
sistema perché non hai inserito il percorso per un tuo suono .wav
-- 
Maria Luisa C - 01/04/04 14.22.31