Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Konstante an Procedure übergeben (https://www.delphipraxis.net/116921-konstante-procedure-uebergeben.html)

Helmi 8. Jul 2008 17:25


Konstante an Procedure übergeben
 
Hallo,

ich steh grad auf dem Schlauch (na gut - ich sitz eher auf dem Schlauch)

ich hab folgende Procedure:
Delphi-Quellcode:
procedure RadioGroup_WordWrap(RadioGroup: TRadioGroup; const Align: DWORD;
  WordWrap_Enabled: Boolean);
//Align-Werte: BS_TOP / BS_VCENTER / BS_BOTTOM / BS_LEFT / BS_RIGHT

var
  i                : Integer;
  RadioButton_Style : DWORD;
  RadioButton      : TRadioButton;

begin
  with RadioGroup do
    begin
      //alle Buttons abfragen
      for i := 0 to Pred(Items.Count) do
        begin
          //RadioButton auslesen
          RadioButton := Buttons[i];

          //momentaner Status des RadioButtons auslesen
          RadioButton_Style := GetWindowLong(RadioButton.Handle, GWL_STYLE);


          If WordWrap_Enabled then
            RadioButton_Style := RadioButton_Style or BS_MULTILINE or BS_CENTER
          else
            RadioButton_Style := RadioButton_Style and not BS_MULTILINE
                                  and not BS_CENTER;

          //neuer Style an RadioButton übergeben
          SetWindowLong(RadioButton.Handle, GWL_STYLE, RadioButton_Style);
        end;
      //aktualisieren
      Invalidate;
    end;
end;
Wie man sieht, ist in dem Code "BS_Center" hart hinterlegt. Dies würd ich aber
nun gerne gegen Align austauschen um von "aussen", also beim Aufruf der
Procedure, angeben was für eine Ausrichtung ich brauche, z. B.:
BS_TOP / BS_VCENTER / BS_BOTTOM / BS_LEFT / BS_RIGHT

Wenn ich aber nun folgendes schreibe:
Delphi-Quellcode:
If WordWrap_Enabled then
  RadioButton_Style := RadioButton_Style or BS_MULTILINE or Align
else
  RadioButton_Style := RadioButton_Style and not BS_MULTILINE and not Align;
dann erhalte ich vom Compiler diese Meldung:
Zitat:

Zitat von Compiler
[Fehler] Unit1.pas(52): Operator ist auf diesen Operandentyp nicht anwendbar

Wie kann ich denn eine solche Konstante an eine Procedure übergeben und dann verarbeiten?

hoika 8. Jul 2008 17:32

Re: Konstante an Procedure übergeben
 
Hallo,

auch RadioGroup hat ein property mit Namen Align

bei deinem

with RadioGroup do
..
Align
..

will der Compiler das Align des RadioGroups verwenden


Lösung 1:

parameter ändern von 'Align nach AAlign oder theAlign
und dann das entsprechende im or ändern.


Lösung 2:
Parameter Nie ohne Prefix verwendne (A oder the)



Heiko

Helmi 8. Jul 2008 17:38

Re: Konstante an Procedure übergeben
 
Mist! - Du hast recht!
Danke

Ich hab total übersehen, dass RadioGroup eine Property namens Align schon
besitzt.

Jetzt trag ich schon ne Brille und seh immer noch nichts :-)

Dank dir!

RavenIV 9. Jul 2008 11:37

Re: Konstante an Procedure übergeben
 
Meine Lösung:
Auf das #°§¬°@ WITH verzichten.
Das macht Probleme beim Lesen des Codes.
Ausserdem kann der Debugger das nicht auflösen.
Es mag zwar Fälle geben, bei denen das WITH Sinn macht, in 90% der Fälle ist es eben nur störend.
Ist halt ein Wenig mehr Tipparbeit (oder Copy-and-Paste), aber man erspart sich damit viele Probleme.
Bei meinem alten Arbeitgeber war das WITH sogar per Firmen-Styleguide *verboten*.

Noch ein Hinweis:
Niemals eigene Variablen oder Paramerter so benennen, wie Delphi-Befehle oder Methoden von Standard-Komponenten.
Nicht umsonst empfiehlt der Borland-Styleguide "fName" für KlassenVariablen und "AName" für Parameter.
Die üblichen Verdächtigen wie "Align", "Index", "Text", usw. kennt man ja.
Dies gilt übrigens auch für Felder in DB-Tabellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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-2025 by Thomas Breitkreuz