Avatar billede morten_s Nybegynder
11. juli 2001 - 11:29 Der er 10 kommentarer og
2 løsninger

Kode udføres ikke ?

unit FrmDriver;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ScktComp, StdCtrls, ExtCtrls;

type
  TFrameDriver = class(TFrame)
    ClientSocket: TClientSocket;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Timer1: TTimer;
    Label5: TLabel;
    procedure ClientSocketConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocketDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure UpdateSimulCommand(Sender: TObject);
  end;


implementation

var
  SocketFunc : Integer;
  SocketString : String;
  SigHeadStatus : String;
  Stat : TStatus;
  UpdateSocket : Boolean;
  SimulCmd : Integer;

{$R *.DFM}

procedure TFrameDriver.UpdateSimulCommand(Sender: TObject);
begin
  Label5.Caption := \'DENNE LABEL SKRIVES ALDRIG PÅ SKÆRMEN\';
  SimulCmd := 0;
  if Simul[0]  then SimulCmd := SimulCmd + 1;
  if Simul[1]  then SimulCmd := SimulCmd + 2;
  if Simul[2]  then SimulCmd := SimulCmd + 4;
  if Simul[3]  then SimulCmd := SimulCmd + 8;
with ClientSocket do
  begin
    Host := IpNo;
    Active := True;
    SocketFunc := 1;
    SocketString :=\'\';
    Socket.SendText(#27);
    Socket.SendText(#27 + \'simul\' + IntToStr(SimulCmd) + #13);
       
Jeg har en frame med bla. ovenstående kode, jeg har selv oprettet proceduren UpdateSimulComand, det mærkværdige er at Label5 aldrig bliver skrevet på skærmen, og socket sender såvidt jeg kan se heller ikke noget.

Hvis jeg tilskriver label5 i en af de andre procedure jeg har i samme unit så ændres teksten godtnok
Avatar billede martinlind Nybegynder
11. juli 2001 - 11:32 #1
Lyder meget mærkeligt, prøv at skrive Label5.Refresh;

på linen lige efter du tilskriver den, og så sæt et breakpoint så kan du jo se om du får kaldt proceduren

/Martin
Avatar billede a_c Nybegynder
11. juli 2001 - 11:33 #2
prøv at sætte et breakpoint på linien og hoppe igennem med F8.
Avatar billede morten_s Nybegynder
11. juli 2001 - 11:35 #3
Label5.Refresh gør ingen forskel.
Når jeg debugger mig gennem koden og holder curseren over caption, kan jeg se at variablen godtnok bliver tilskrevet, det kommer bare ikke på skærmen

Kan det have noget og gøre med at det er en frame ?
Avatar billede morten_s Nybegynder
11. juli 2001 - 11:36 #4
Disse linerer sendes heller ikke:
SocketString :=\'\';
    Socket.SendText(#27);
    Socket.SendText(#27 + \'simul\' + IntToStr(SimulCmd) + #13);

Skal proceduren ikke være erklæret i public ?
Avatar billede martinlind Nybegynder
11. juli 2001 - 11:44 #5
NEJ, det betyder ikke noget at det er en frame, du skal nok prøve at steppe i gennem hele proceduren, det kunne jo tænkes at du får en fejl når du sætter din ClientSocket.Active := TRUE, hvilket forøvrigt også kan tage noget tid, som igen medfører at det ville være en god ide under alle omstændigheder at Refresh\'e din label5, men under alle omstændigheder, så er det sikkert din socket der er problemet, hvis den hænger eller fejler kan det godt gøre mærkelige ting med din label opd., du kunne evt. prøve bare at lave en showmessage() i stedet for, den vil sikkert virke.

/Martin
Avatar billede morten_s Nybegynder
11. juli 2001 - 14:37 #6
Hvis jeg sætter en knap på formen med følgende kode
procedure TFrameDriver.Button5Click(Sender: TObject);
begin
  UpdateSimulCommand(Sender);
end;

så fungere koden fint, men hvis jeg kalder den fra en anden \"Frame\" sker der ikke en skid.

Kan det være et spørgsmål om hvem Sender er ?
Avatar billede martinlind Nybegynder
11. juli 2001 - 14:40 #7
Ikke medmindre du bruger den.
Avatar billede morten_s Nybegynder
11. juli 2001 - 15:03 #8
Følgende kode virker ???

/snip

  SimulCmd : Integer;

{$R *.DFM}

procedure TFrameDriver.UpdateSimulCommand(Sender: TObject);
begin
  SimulCmd := 0;
  if Simul[0]  then SimulCmd := SimulCmd + 1;
  if Simul[1]  then SimulCmd := SimulCmd + 2;
  if Simul[2]  then SimulCmd := SimulCmd + 4;
  if Simul[3]  then SimulCmd := SimulCmd + 8;
  Button3Click(Sender);
end;

procedure TFrameDriver.Button3Click(Sender: TObject);
var
s : String;
begin
  S := IntToStr(SimulCmd);
  SocketFunc := 1;
  SocketString :=\'\';
  ClientSocket.Socket.SendText(#27);
  ClientSocket.Socket.SendText(#27 + \'simul\' + S + #13);
end;

/snap

og følgende virker ikke

/snip

  SimulCmd : Integer;

{$R *.DFM}

procedure TFrameDriver.UpdateSimulCommand(Sender: TObject);
var
  s: string;
begin
  SimulCmd := 0;
  if Simul[0]  then SimulCmd := SimulCmd + 1;
  if Simul[1]  then SimulCmd := SimulCmd + 2;
  if Simul[2]  then SimulCmd := SimulCmd + 4;
  if Simul[3]  then SimulCmd := SimulCmd + 8;
  S := IntToStr(SimulCmd);
  SocketFunc := 1;
  SocketString :=\'\';
  ClientSocket.Socket.SendText(#27);
  ClientSocket.Socket.SendText(#27 + \'simul\' + S + #13);
end;

/snap

Men det burde vel være det samme ????
Avatar billede martinlind Nybegynder
11. juli 2001 - 15:12 #9
Meget mærkeligt, har du prøvet at udkomentere ALT Socket og så lave noget andet i stedet ( et eller andet dummy ), det virker temmelig \"spændene\". Prøv evt. at Button3.Click; så du ikke sender Sender med ( både en knap og menu har en Click procedure )

/Martin
Avatar billede morten_s Nybegynder
11. juli 2001 - 15:36 #10
Button3.Click; virker fint, så nu har jeg en knap med viible := false på min form ;-((

Jeg har prøvet til med noget dummy i proceduren, det var min Label5, det virkede ikke
Avatar billede morten_s Nybegynder
11. juli 2001 - 15:38 #11
Martin>> En anden ting.

Hvis jeg åbner et vindue (form) \"Show\" ikke Showmodal da jeg har mere end et, hvordan får jeg det så til at ligge øverst selv om man kligger på det underliggende vindue
Avatar billede martinlind Nybegynder
11. juli 2001 - 15:46 #12
Evt. med StayOnTop eller et API klad har det ikke lige i hovedet, kig i API 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