hier wird anscheinend immer der zuletzt aufgeführte Parameter benutzt.
Das ',' ersetzt folgende Schreibweise:
Code: Alles auswählen
with Button1, Button2 do
// ist gleich:
with Button1 do with Button2 do
hier wird anscheinend immer der zuletzt aufgeführte Parameter benutzt.
Code: Alles auswählen
with Button1, Button2 do
// ist gleich:
with Button1 do with Button2 do
m.fuchs hat geschrieben:Wenn du Blöcke abtrennen möchtest, dann verwende doch einfach mal Methoden.
Aber ich finde es gut, dass die Diskussion aufgekommen ist. So konnte ich gleich mal meine Code-Quality-Checks um ein Verbot von with...do erweitern.
Code: Alles auswählen
procedure TFooBar.Foo(Params);
type
// Typen
var
// Variablen
const
// Konstanten
// Subfunktionen:
procedure Bar(Params2);
//...
begin
end;
type
// Typen
var
// Variablen
const
// Konstanten
begin
Bar(Params to be passed);
end;
Code: Alles auswählen
procedure QuickSort(Arr: TIntegerArray);
procedure QuickSortHelper(H, L: Integer);
begin
// Qicksort auf arr
end;
begin
QuickSortHelper(High(Arr), Low(Arr));
end;
m.fuchs hat geschrieben:Ja, da ist das in Visual Basic.NET wirklich sauberer gelöst.
Warf hat geschrieben:Da kann man aber auch eins meiner Lieblings pascal features verwenden, geschachtelte Methoden:
Code: Alles auswählen
With MyObj do Caption:='With ist blöd';
Code: Alles auswählen
Code: Alles auswählen
WriteLn(
'RedPrc: ', Image1.Picture.Bitmap.RawImage.Description.RedPrec,
' RedShift: ', Image1.Picture.Bitmap.RawImage.Description.RedShift,
' GreenPrec: ', Image1.Picture.Bitmap.RawImage.Description.GreenPrec,
' Green: ', Image1.Picture.Bitmap.RawImage.Description.GreenShift,
' BluePrec: ', Image1.Picture.Bitmap.RawImage.Description.BluePrec,
' BlueShift: ', Image1.Picture.Bitmap.RawImage.Description.BlueShift);
// oder
with Image1.Picture.Bitmap.RawImage.Description do begin
WriteLn('RedPrc: ', RedPrec, ' RedShift: ', RedShift,
' GreenPrec: ', GreenPrec, ' Green: ', GreenShift,
' BluePrec: ', BluePrec, ' BlueShift: ', BlueShift);
end;
Mathias hat geschrieben:Findest du da with immer noch blöd ?
Code: Alles auswählen
var
desc: TRawImageDescription;
...
desc := Image1.Picture.Bitmap.RawImage.Description;
WriteLn(
'RedPrc: ', desc.RedPrec,
' RedShift: ', desc.RedShift,
' GreenPrec: ', desc.GreenPrec,
' Green: ', desc.GreenShift,
' BluePrec: ', desc.BluePrec,
' BlueShift: ', desc.BlueShift);
Code: Alles auswählen
var
img: TRawImage;
...
img := Image1.Picture.Bitmap.RawImage;
WriteLn(
'RedPrc: ', img.Description.RedPrec,
' RedShift: ', img.Description.RedShift,
' GreenPrec: ', img.Description.GreenPrec,
' Green: ', img.Description.GreenShift,
' BluePrec: ', img.Description.BluePrec,
' BlueShift: ', img.Description.BlueShift);
Dir ist aber bewusset, das du etwas mehr als nur einen Pointer kopierst ?sondern hätte stattdessen eine Zwischenvariable deklariert, die mir im Fall des Falles auch einfachen Zugriff durch den Debugger erlaubt:
Code: Alles auswählen
var
desc: TRawImageDescription;
img: TRawImage;
begin
WriteLn(SizeOf(desc)); // --> 68
WriteLn(SizeOf(img)); // --> 120
mse hat geschrieben:Auf die Gefahr hin dass ich mich wiederhole:
Free Pascal braucht eine sichere "with" Variante.
Es wird seit über zehn Jahren immer wieder diskutiert und Luca Olivetti zeigt jeweils einen uralt Pascal Dialekt der ein entsprechendes Konstrukt zur Verfügung stellt - alles ohne Wirkung.
Code: Alles auswählen
{$NewWidth}
with Canvas do begin
.Line(0, 0, 100, 100);
end;
mse hat geschrieben:Auf die Gefahr hin dass ich mich wiederhole:
Free Pascal braucht eine sichere "with" Variante.