Autor Beitrag
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Mi 18.10.23 23:45 
with ist eine Anweisung, die böse Fehler verursachen kann, die nur schwer ins Auge stechen, siehe auch with statement considered harmful.

Aus diesem Grund wurde der VCL-Sourcecode überarbeitet, um ohne with auszukommen.

Beim Debugging ist with ein Horror, da der Inspektor damit nicht klarkommt und man selbst die auszuwertenden Ausdrücke innerhalb eines with anpassen muß.
In Deinem Fall zB müßtest Du um bei einem Haltepunkt "Canvas.Brush.Color" auszuwerten immer "Stringgrid1." davorschreiben.

Ansonsten finde ich die Behauptung, "with" würde eine Kündigung rechtfertigen, etwas übertrieben :)

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.

Für diesen Beitrag haben gedankt: DelphiJogi
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1322
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 19.10.23 18:21 
Ich gehe davon aus dass nur faule und oder rücksichtslose Mitarbeiter with verwenden, somit stellt es keinen Verlust, sondern eine Schadensminimierung dar, sich von denen schnellstmöglich zu trennen.
Ist klar, das ist drastisch, aber auch die Probleme können drastisch ausfallen wenn es um viel Geld oder Menschenleben geht. Zum Glück hat es noch keinen Fall gegeben bei dem jemand zu Schaden gekommen ist.

Um es komplett zu machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
// irgendwo weiter oben :
SgdColoredCells: TStringGrid;
 
procedure TForm5.SgdColoredCellsDrawCell(Sender: TObject; ACol,ARow: Integer; Rect: TRect; State: TGridDrawState);
begin 
   if not Odd(ARow) and not (gdFixed in State) then
   begin
     SgdColoredCells.Canvas.Brush.Color := clRed;
     SgdColoredCells.Canvas.FillRect(Rect);
     SgdColoredCells.Canvas.TextOut(Rect.Left+2, Rect.Top+2, SgdColoredCells.Cells[ACol, ARow]);
   end;
end;

PS: Es gibt auch Firmen die die Zwischenablage überwachen um sicherzustellen das nicht Quelltext wild umherkopiert wird. Denn auch das ist eine ganz ordentliche Fehlerquelle bei programmieren.
Zum Beispiel beim ersetzten von Variablen oder Aufrufen. Wo dann was zuviel ersetzt wird oder was falsches mitkopiert wurde. Wenn man das alles selber schreiben muss denkt man besser mit was man macht.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?