Thema: Delphi Seltsames Werteverhalten

Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Seltsames Werteverhalten

  Alt 29. Jan 2019, 13:52
Delphi-Version: 5
Hi zusammen

Da sich dieser Thread vom ursprünglichen Thema entfernt hat, beginne ich hier einen Neuen.
Corpus Delicti ist dies:
aktuelleansicht.jpg
Vorerst aber zu dem, was sich seit dem oben verlinkten Thread geändert hat.
Nach wie vor im RadiobuttonFrame:
Delphi-Quellcode:
procedure TRadioButtonsFrame.RadioButtonPosition2;
  var i, x, y, ScBX, LHeight, LLeft: Integer;
begin
  inc(FResizeCounter);
  x := FRadioButtonList.Count -1;
  Self.FReportList.Add('procedure TRadioButtonsFrame.RadioButtonPosition2 - ' + inttostr(FResizeCounter));
  For i := 0 to x do
  begin
    FRadioButtonList.Items[i].Width := 50;

    LLeft := (ScBxRadioButtons.ClientWidth div 2) - (FRadioButtonList.Items[i].Width div 2);
    LHeight := (i * FRadioButtonList.Items[i].Height) + ScBxRadioButtons.ClientHeight div 4;
    ScBX := ScBxRadioButtons.ClientWidth div 2; //<=
    Self.FReportList.Add('ScBxRadioButtons.ClientWidth div 2 := ' + IntToStr(ScBX));

    Self.FReportList.Add('LLeft := ' + IntToStr(LLeft));
    Self.FReportList.Add('LHeight := ' + IntToStr(LHeight));

    FRadioButtonList.Items[i].Left := LLeft;
    FRadioButtonList.Items[i].Top := LHeight;
  end;
end;
Als einziges ist hier die grün markierte Zeile hinzugekommen. Ausserdem wird die Routine nicht mehr aus dem OnResize des Frames, sondern as dem OnCreate der Mainform aufgerufen:
Delphi-Quellcode:
procedure THomeOfficerMainForm.FormCreate(Sender: TObject);
begin
  FReportList := TStringlist.Create();
  Self.RadioButtonsFrame1.RadioButtonPosition2;
  Self.PdfScanFrame1.RadioButtonsFrame1.RadioButtonPosition2;
end;
Beim Beenden der Form lese ich die Reportliste des Frames aus:
Delphi-Quellcode:
procedure THomeOfficerMainForm.WriteReportFile;
  var S, DateTimeStr, DS: string;
      ReportStream: TFileStream;
begin
  DS := DateTimeToStr(Now);
  DateTimeStr := StringReplace(DS, ':', '-', [rfReplaceAll]);
  S := ExtractFilePath(Application.ExeName) + '\' + 'CodeReport ' +DateTimeStr+'.txt';
  try
    Reportstream := TFileStream.Create(S, fmOpenReadWrite);
  except
    Reportstream := TFileStream.Create(S, fmCreate);
  end;
  try
    FReportList.insert(0,DateTimeToStr(Now));
    FReportlist.Insert(1,'----------------');
    FReportList.AddStrings(Self.RadioButtonsFrame1.ReportList);
    FReportList.AddStrings(Self.PdfScanFrame1.RadioButtonsFrame1.ReportList);
    FReportlist.SaveToStream(ReportStream);
  finally
    Reportstream.Free;
  end;
end;
Und diese Liste:
Delphi-Quellcode:
29.01.2019 13:17:49
----------------
procedure TRadioButtonsFrame.RadioButtonPosition2 - 1
ScBxRadioButtons.ClientWidth div 2 := 396 //<==
LLeft := 371
LHeight := 55
ScBxRadioButtons.ClientWidth div 2 := 396 //<==
LLeft := 371
LHeight := 74
ScBxRadioButtons.ClientWidth div 2 := 396 //<==
LLeft := 371
LHeight := 97
ScBxRadioButtons.ClientWidth div 2 := 396 //<==
LLeft := 371
LHeight := 118

procedure TRadioButtonsFrame.RadioButtonPosition2 - 1
ScBxRadioButtons.ClientWidth div 2 := 43 //<==
LLeft := 18
LHeight := 32
ScBxRadioButtons.ClientWidth div 2 := 43 //<==
LLeft := 18
LHeight := 51
ScBxRadioButtons.ClientWidth div 2 := 51 //<====
LLeft := 26
LHeight := 74
ScBxRadioButtons.ClientWidth div 2 := 51 //<==
LLeft := 26
LHeight := 95
Wie man sieht, ändert sich nach dem 2. Prozedurkopf der Wert von ScBxRadioButtons.ClientWidth div 2 (ScBx := Scrollbox). Wie kann so etwas geschehen?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat