Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi with sender (https://www.delphipraxis.net/116968-sender.html)

RavenIV 9. Jul 2008 15:13

Re: with sender
 
Zitat:

Zitat von Cyf
Delphi-Quellcode:
with TPanel(Sender) do
  begin
    if Visible = true then
      Visible := false
    else
      Visible := true;
  end;

Nur so als Hinweis an die Allgemeinheit mal wieder.
Niemals eine Boolsche Variable auf True prüfen.
Dies kann auch in die Hose gehen, weil Boolean eigentlich "nur" ein Integer ist und True alles ungleich 0 ist.

Dies reicht vollständig:
Delphi-Quellcode:
if MyPanel.Visible then

shmia 9. Jul 2008 15:28

Re: with sender
 
Kürzer geht's nicht: ;-)
Delphi-Quellcode:
with TPanel(Sender) do Visible := not Visible;

Cyf 9. Jul 2008 20:02

Re: with sender
 
Ja habt ja recht, normal tuh ich das auch nicht, hatte nur grad so schön das Ding einfach aufs erstbeste umgeschreiben, ohne zu denken :wink: (in dem Fall ist die Überprüfung ohnehin hinfällig, weil man niemals auf etwas unsichtbares klicken wird)


Zitat:

Delphi-Quellcode:
with TPanel(Sender) do Visible := not Visible;

Wenn schon dann

Delphi-Quellcode:
with (Sender as TPanel) do Visible := not Visible;
außerdem ist das with dann überflüssig (und zudem soll das Wort with ja Leute beißen...)

Zitat:

weil Boolean eigentlich "nur" ein Integer ist und True alles ungleich 0 ist
Sicher? Ist es nicht eher ein Byte (ohne die Größe grad geprüft zu haben)?

SubData 9. Jul 2008 20:24

Re: with sender
 
Nein, ist definitiv ein Integer

Cyf 9. Jul 2008 20:29

Re: with sender
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var aBool: Boolean;
begin
  Showmessage(Inttostr(SizeOf(aBool)));
end;
Gibt bei mir 1 aus? Sollte das allerdings tatsächlich 4 Byte groß sein und das Programm lügt mich aus irgendwelchen Fragmentierungsgründen an, hab ich wieder einen Grund mehr, Einstellungen lieber in Sets zu speichern.

SubData 9. Jul 2008 20:32

Re: with sender
 
Oh, ich muss mich korrigieren.

Du hast natürlich recht.
Ein einfacher Boolean hat nur ein Byte.
Aus Kompatiblitätsgründen gibt es allerdings noch ByteBool und LongBool.

Verzeihung, mein Fehler.

RavenIV 10. Jul 2008 08:57

Re: with sender
 
Aus der Delphi7-Hilfe:
Zitat:

Es gibt vier vordefinierte Boolesche Typen: Boolean, ByteBool, WordBool und LongBool. In der Praxis wird in erster Linie der Typ Boolean verwendet. Die anderen Typen dienen der Kompatibilität zu anderen Sprachen und Betriebssystembibliotheken.

Eine Boolean-Variable belegt ebenso wie eine ByteBool-Variable ein Byte Speicherplatz. Eine WordBool-Variable belegt zwei (ein Word) und eine LongBool-Variable vier Bytes (zwei Word).

OldGrumpy 10. Jul 2008 09:13

Re: with sender
 
Also nochmal zusammengefasst:

Delphi-Quellcode:
Procedure TForm1.panelclick(Sender: TObject);
Begin
  if (Sender as TPanel).BevelOuter = bvRaised then //integraler Typencheck mit as
  Begin
    //Typencheck hier schon erfolgt, daher nicht nochmal notwendig
    //kleiner Performancevorteil, hier zwar nicht relevant, aber trotzdem :)
    TPanel(Sender).BevelOuter := bvLowered;
  End
  Else
  Begin
    TPanel(Sender).BevelOuter := bvRaised;
  End;
End;
An passender Stelle, z.B. im FormCreate dann noch setzen:

Delphi-Quellcode:
panel1.OnClick := panelclick;
Panel2.OnClick := panelclick;
panel3.OnClick := panelclick;
[...]
//edits: aufhübschen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr.
Seite 2 von 2     12   

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