05. april 2012 - 17:20 Der er 6 kommentarer og
1 løsning

TRadioGroup select i run time problemer.

unit Figur103;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, Unit59;

type
  TForm103 = class(TForm)
    Label1: TLabel;
    Studio: TRadioGroup;
    Label2: TLabel;
    ESC: TButton;
    Tekst: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    procedure FormShow(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
    function Rette(Dato: TDateTime; F: TCoordinates): TModalResult;
  end;

var
  Form103: TForm103;

implementation

{$R *.dfm}

procedure TForm103.FormShow(Sender: TObject);
begin
  Form103.Top  := Unit59.Top + 40;
  Form103.Left := Unit59.Left + 200;

end;

function TForm103.Rette(Dato: TDateTime; F: TCoordinates): TModalResult;
begin
  Label3.Caption  := Global.UgeDag.Items[DayOfWeek(Dato + F.X)];
  Label1.Caption  := DateToStr(Dato + F.X);                                // Dato der henvises til.
  Label2.Caption  := IntToStr(F.Y) + ':00 - ' + IntToStr(F.Y + 1) + ':00';  // Tidspunkt der henvises til.

  Studio.ItemIndex := F.Z;                                                  // Studio der henvises til

//  Label4.Caption := IntToStr(F.Z);

  Form103.ShowModal;
  Rette := ModalResult;
end;

procedure TForm103.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_Cancel  : ModalResult := MrCancel;


  else

  end;
end;

end.

TCoordinates er en record med tre numeriske værdier, X, Y, Z.
Studio er en TRadioGroup, og indeholder fire linier.
Formen åbnes fra et andet sted via public function Rette().
Det er linien "Studio.ItemIndex := F.Z;" der driller.
//  Label4.Caption := IntToStr(F.Z); er sat på for at se om F.Z overfører den rigtige værdi, og det gør den.
Første gang formen vises, reagerer "Studio.ItemIndex := F.Z;" korrekt, men de næste gange gør den ikke.
Hvad gør jeg forkert?
Avatar billede martinlind Nybegynder
05. april 2012 - 18:34 #1
du laver fejl i dine refs :

procedure TForm103.FormShow(Sender: TObject);
begin
-->  Form103.Top  := Unit59.Top + 40;
-->  Form103.Left := Unit59.Left + 200;

end;

skal være :

procedure TForm103.FormShow(Sender: TObject);
begin
  Self.Top  := Unit59.Top + 40;
  Self.Left := Unit59.Left + 200;
end;


Det skal du rette ALLE steder i TForm103 procedurende, åg så kan du spørge igen hvis det ikke hjælper, det gælder forøvrigt gennerelt at du SKAL ref. til formen-selv med self. og IKKE din form-var !
05. april 2012 - 18:50 #2
Det er linien "Studio.ItemIndex := F.Z;" der driller.
Første gang formen vises, reagerer "Studio.ItemIndex := F.Z;" korrekt, men de næste gange gør den ikke.

At jeg ændrer Formshow, hjælper ikke på mit problem.
05. april 2012 - 19:11 #3
Hovsa, hvis jeg skriver:

  Studio.Enabled  := False;
  Studio.ItemIndex := F.Z;
  Studio.Enabled  := True;

Så virker det.

Hvorfor?
Avatar billede martinlind Nybegynder
06. april 2012 - 10:18 #4
du skulle overveje at lave din kode RIGTIGT, det er skrub-forkert at du refferer til form-var'en inde i formens egne procedurer, hvilken kan gi nogle mærkelige fejl....

Og jeg må tilstå jeg ikke gider spilde tid på noget kode der er skrub-forkert kodet....

God påske :-)
06. april 2012 - 12:41 #5
Hov hov Martin, klap lige hesten.

Jeg har rettet det du skrev til;
procedure TForm103.FormShow(Sender: TObject);
begin
  Self.Top  := Unit59.Top + 40;
  Self.Left := Unit59.Left + 200;
end;

Men hvad har det at gøre med at man ikke kan ændre hvilken knap der er valgt i en TRadioGroup, i runtime?

Du skriver "det er skrub-forkert at du refferer til form-var'en inde i formens egne procedurer, hvilken kan gi nogle mærkelige fejl...."

Hvordan vil du så sikre at din form er placeret på det rigtige sted?

Mit program er designet således at hvis brugeren farer vild, så kan vedkommende bare trykke på "ESC" en hel masse gange, og så prøve igen, og alle formene er placeret der hvor man forventer, med default indstillingerne.
Og det kan jeg kun gøre ved at ændre på formens propeties, og default indstillingerne.
Avatar billede martinlind Nybegynder
06. april 2012 - 19:18 #6
du skal rette det alle steder i alle form-procedurende, ellers kan du komme ud for at dine procedure retter på form-var'en selv om du evt. bruger en anden instance og du kan få fejl hvis din form-var slet ikke er created osv.... så det skal du starte med.

Hvordan vil du så sikre at din form er placeret på det rigtige sted? --> ved at bruge self. så sikrer du at det altid er aktuelle instance du arbejder på :-)

ps. så vit jeg husker var der nogle ting med combobox og itemindex, måske der også er det med radiogroup
05. maj 2012 - 04:28 #7
Lukker uden besvarelser.
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