![]() |
Delphi-Version: 5
Seltsames Werteverhalten
Liste der Anhänge anzeigen (Anzahl: 1)
Hi zusammen
Da sich ![]() Corpus Delicti ist dies: Anhang 50631 Vorerst aber zu dem, was sich seit dem oben verlinkten Thread geändert hat. Nach wie vor im RadiobuttonFrame:
Delphi-Quellcode:
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:
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;
Delphi-Quellcode:
Beim Beenden der Form lese ich die Reportliste des Frames aus:
procedure THomeOfficerMainForm.FormCreate(Sender: TObject);
begin FReportList := TStringlist.Create(); Self.RadioButtonsFrame1.RadioButtonPosition2; Self.PdfScanFrame1.RadioButtonsFrame1.RadioButtonPosition2; end;
Delphi-Quellcode:
Und diese Liste:
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;
Delphi-Quellcode:
Wie man sieht, ändert sich nach dem 2. Prozedurkopf der Wert von ScBxRadioButtons.ClientWidth div 2 (ScBx := Scrollbox). Wie kann so etwas geschehen?
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 Gruss Delbor |
AW: Seltsames Werteverhalten
Also als aller erstes:
Delphi-Quellcode:
brauchst du nur bei expliziten Referenzen auf die Instanz (bzw. den Klassentypen bei nichtstatischen Klassenmethoden). In dem Fall (siehe OnCreate-Methode) ist das unnötig und macht den Code auch nicht gerade leichter zu lesen.
Self
Und dann zu was generellem: Versuch mal bitte für die Zukunft, nicht einfach deinen gesamten Programmcode hier hinzupasten und dann zu fragen was damit nicht stimmt. Das schreckt echt ab und sorgt, wie du sicher festgestellt hast, nicht gerade dafür, dass sich viele Leute freiwillig mit deinem Problem beschäftigen. Lösche irelevanten Code weitestgehend, sodass jeder innerhalb weniger Sekunden verstanden hat, was für ein Problem du hast. So, jetzt zum Problem: Was ist "ScBxRadioButtons" und was ist "TRadioButtonsFrame"? |
AW: Seltsames Werteverhalten
Hi Dennis07
Zitat:
Ich wollte aufzeigen, wie die Radiobuttons entstehen - beide Radiobutton-Guppen entstehen aus dem selben Code in der Prozedure TRadioButtonsFrame.RadioButtonPosition2. Auf der Form habe ich 2 Frameinstanzen, die diese Prozedur geerbt haben und die nun aus dem MainformCreate heraus aufgerufen werden. Die beiden Instanzen unterscheiden sich deutlich in der Grösse, was aus der Reportliste ganz am Schluss des Beitrags ersichtlich ist. Diese Liste verrät aber auch, dass sich die Leftwerte im kleineren Container ab dem dritten Element ändern. Beim Durchlesen sehe ich: etwas verwirrend dürfte die lokale Variable LHeight sein - die definiert nicht die Höhe des i-ten Elements, sondern dessen Top, der sich aus der Höhe der vorangegangenen Elemente ergibt. Unglücklich ist auch dies:
Delphi-Quellcode:
Auch hier wird nicht die Höhe, sondern der Top der Elemente festgelegt (Beim erste Durchlauf 0 x die Höhe).
LHeight := (i * FRadioButtonList.Items[i].Height) + ScBxRadioButtons.ClientHeight div 4;
Inzwischen umgehe(?) ich das Problem, indem ich noch vor Eintritt in die Schleife einen Wert festlege:
Delphi-Quellcode:
ScBx ist somit die Mitte der Scrollbox.
ScBX := ScBxRadioButtons.ClientWidth div 2;
Left berechne ich dann in der Schleife:
Delphi-Quellcode:
Aber - und das ist wahrscheinlich das Wesentliche - der erste Topwert berechnet sich so:
LLeft := ScBX - (FRadioButtonList.Items[i].Width div 2);
Delphi-Quellcode:
Damit werden alle 4 Radiobuttons höher platziert. Und das bringt mich auf die Idee, dass die Scrollbox nach dem 2. Element eine vertikale Scrollbar eingeblendet und so den Clientwith verändert hat.
LHeight := (i * FRadioButtonList.Items[i].Height) + ScBxRadioButtons.ClientHeight div 6;
Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz