AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Boolean ändert nicht seinen Wert (?)

Ein Thema von xZise · begonnen am 30. Jul 2006 · letzter Beitrag vom 30. Jul 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#11

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 14:29
15 37 in Deutschlan/Österreich/Schweiz:
Alle sind im DP forum ^^ Dank erstmal für die ganzen Antworten... Eigentlich dachte ich auch das der Code geht, deshalb habe ich mich auch gewundert, das er eben nicht geht. Ich poste hier mal die ganze pas!

Delphi-Quellcode:
unit settings;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XiButton, XiTrackBar, ExtCtrls, JvExStdCtrls,
  JvWinampLabel, XiPanel;

type
  TEQCArray = array [1..3] of Byte;

type
  TfrmSettings = class(TForm)
    xiBg: TXiPanel;
    xiCaptionBar: TXiPanel;
    buttonCloseOver: TImage;
    buttonCloseOut: TImage;
    xiCancel: TXiButton;
    xiOk: TXiButton;
    sBottom: TShape;
    sLeft: TShape;
    sRight: TShape;
    XiPanel1: TXiPanel;
    xiFadeOutOnClose: TXiButton;
    xiCrossfade: TXiButton;
    lFadeTime: TLabel;
    Label2: TLabel;
    xiFadeTime: TXiTrackBar;
    Label1: TLabel;
    XiPanel2: TXiPanel;
    Label5: TLabel;
    XiButton3: TXiButton;
    XiButton4: TXiButton;
    XiPanel3: TXiPanel;
    Label3: TLabel;
    eqTb3: TXiTrackBar;
    eqTb2: TXiTrackBar;
    eqTb1: TXiTrackBar;
    xiSets: TXiPanel;
    xiSet0: TXiButton;
    xiSetsButton: TXiPanel;
    XiButton5: TXiButton;
    xiSet1: TXiButton;
    xiSet2: TXiButton;
    xiSet3: TXiButton;
    xiSet4: TXiButton;
    xiSet5: TXiButton;
    pos3: TLabel;
    pos1: TLabel;
    pos2: TLabel;
    procedure xiFadeTimeChange(Sender: TObject);
    procedure xiSetsButtonClick(Sender: TObject);
    procedure buttonCloseOutMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure buttonCloseOverClick(Sender: TObject);
    procedure xiFadeOutOnCloseClick(Sender: TObject);
    procedure xiCrossfadeClick(Sender: TObject);
    procedure xiCancelClick(Sender: TObject);
    procedure xiOkClick(Sender: TObject);
    procedure xiSet0Click(Sender: TObject);
    procedure eqTb1Change(Sender: TObject);
    procedure eqTb2Change(Sender: TObject);
    procedure eqTb3Change(Sender: TObject);
    procedure xiCaptionBarMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormShow(Sender: TObject);
    procedure xiCaptionBarMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    FadeOutOnClose, Crossfade, noAbort : Boolean; // @ mkinzler (siehe auch bitte @ *)
    EQSetNum : Integer;
    FadeTime : Extended;
    procedure SetEQControl(EQCArray : TEQCArray);
  public
    function Execute(eFadeOutOnClose, eCrossfade : Boolean; eEQSetNum : Integer; eFadeTime : Extended) : Boolean;

    function getFadeOutOnClose : Boolean;
    function getCrossfade : Boolean;
    function getEQSetNum : Integer;
    function getFadeTime : Extended;
  end;

var
  frmSettings : TfrmSettings;

implementation

{$R *.dfm}

procedure TfrmSettings.xiFadeTimeChange(Sender: TObject);
begin
  lFadeTime.Caption := FloatToStr(xiFadeTime.Position / 10);
  FadeTime := xiFadeTime.Position * 100;
end;

procedure TfrmSettings.xiSetsButtonClick(Sender: TObject);
begin
  if xiSetsButton.BevelOuter = bvRaised then
    xiSetsButton.BevelOuter := bvNone
  else
    xiSetsButton.BevelOuter := bvRaised;
  xiSets.Visible := xiSetsButton.BevelOuter = bvRaised;
end;

procedure TfrmSettings.buttonCloseOutMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  buttonCloseOut.Visible := False;
  buttonCloseOver.Visible := True;
end;

procedure TfrmSettings.buttonCloseOverClick(Sender: TObject);
begin
  buttonCloseOut.Visible := True;
  buttonCloseOver.Visible := False;
  Close;
end;

function TfrmSettings.Execute(eFadeOutOnClose, eCrossfade : Boolean; eEQSetNum : Integer; eFadeTime : Extended) : Boolean;
begin
  Crossfade := not eCrossfade;
  FadeOutOnClose := not eFadeOutOnClose;
  EQSetNum := eEQSetNum;
  FadeTime := eFadeTime;

  xiFadeOutOnCloseClick(xiFadeOutOnClose);
  xiCrossfadeClick(xiCrossfade);
  xiFadeTime.Position := Round(eFadeTime / 100);

  xiSet0Click(FindComponent('xiSet' + IntToStr(EQSetNum)));

  ShowModal;

  Result := noAbort;
end;

procedure TfrmSettings.xiFadeOutOnCloseClick(Sender: TObject);
begin
  FadeOutOnClose := not FadeOutOnClose;
  if FadeOutOnClose then
    xiFadeOutOnClose.Caption := 'Deactivate fade out on close'
  else
    xiFadeOutOnClose.Caption := 'Activate fade out on close';
end;

procedure TfrmSettings.xiCrossfadeClick(Sender: TObject);
begin
  Crossfade := not Crossfade;
  if Crossfade then
    xiCrossfade.Caption := 'Deactivate automatic crossfade'
  else
    xiCrossfade.Caption := 'Activate automatic crossfade';
end;

procedure TfrmSettings.xiOkClick(Sender: TObject);
begin
  noAbort := true;
end;


procedure TfrmSettings.xiCancelClick(Sender: TObject);
begin
  noAbort := false;
end;


procedure TfrmSettings.xiSet0Click(Sender: TObject);
var EQCArray : TEQCArray;
begin
  if Sender is TXiButton then begin
    EQSetNum := StrToInt(Copy((Sender as TXiButton).Name, 6, Length((Sender as TXiButton).Name)));
    case EQSetNum of
      0 : begin
        EQCArray[1] := 15;
        EQCArray[2] := 15;
        EQCArray[3] := 15;
        SetEQControl(EQCArray);
      end;
      2 : begin
        EQCArray[1] := 16;
        EQCArray[2] := 18;
        EQCArray[3] := 15;
        SetEQControl(EQCArray);
      end;
      3 : begin
        EQCArray[1] := 16;
        EQCArray[2] := 14;
        EQCArray[3] := 18;
        SetEQControl(EQCArray);
      end;
      4 : begin
        EQCArray[1] := 16;
        EQCArray[2] := 15;
        EQCArray[3] := 14;
        SetEQControl(EQCArray);
      end;
      5 : begin
        EQCArray[1] := 16;
        EQCArray[2] := 14;
        EQCArray[3] := 16;
        SetEQControl(EQCArray);
      end;
    end;
  end;
end;

procedure TfrmSettings.SetEQControl(EQCArray : TEQCArray);
begin
  eqTb1.Position := EQCArray[1];
  eqTb2.Position := EQCArray[2];
  eqTb3.Position := EQCArray[3];
end;

function TfrmSettings.getFadeOutOnClose : Boolean;
begin
  Result := FadeOutOnClose;
end;

function TfrmSettings.getCrossfade : Boolean;
begin
  Result := Crossfade;
end;

function TfrmSettings.getEQSetNum : Integer;
begin
  Result := EQSetNum;
end;

function TfrmSettings.getFadeTime : Extended;
begin
  Result := FadeTime;
end;

procedure TfrmSettings.eqTb1Change(Sender: TObject);
begin
  pos1.Caption := IntToStr(30 - eqTb1.Position);
end;

procedure TfrmSettings.eqTb2Change(Sender: TObject);
begin
  pos2.Caption := IntToStr(30 - eqTb2.Position);
end;

procedure TfrmSettings.eqTb3Change(Sender: TObject);
begin
  pos3.Caption := IntToStr(30 - eqTb3.Position);
end;

procedure TfrmSettings.xiCaptionBarMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  buttonCloseOut.Visible := True;
  buttonCloseOver.Visible := False;
end;

procedure TfrmSettings.FormShow(Sender: TObject);
var hDesk : HWND;
    hdcDesktop : HDC;
    p : TPoint;
    crefPixel : COLORREF;
begin
  p.X := 9;
  p.Y := 40;

  hDesk := GetDesktopWindow;
  hdcDesktop := GetWindowDC(hDesk);

  crefPixel := GetPixel(hdcDesktop, p.x, p.y);
  eqTb1.BackColor := crefPixel;
  eqTb2.BackColor := crefPixel;
  eqTb3.BackColor := crefPixel;
end;

procedure TfrmSettings.xiCaptionBarMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  Perform(wm_syscommand,$f012, 0);
end;

end.
* für mkinzler: Mir war klar das du wo meintest... Nur weiß ich nicht wie man den Bereich da oben beschreibt ^^
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 14:35
Zitat:
* für mkinzler: Mir war klar das du wo meintest... Very Happy Nur weiß ich nicht wie man den Bereich da oben beschreibt ^^
Die Beschreibung war ok ich hab halt meinen Tippfehler gesehen, als du mich zitiert hast.
Markus Kinzler
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 14:37
Moin Fabian,

wenn ich das richtig sehe handelt es sich nicht um einen TButton, sondern TxiButton.
Der muss sich jetzt aber nicht zwingend so verhalten wie ein TButton.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#14

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 14:40
Zitat von Christian Seehase:
Moin Fabian,

wenn ich das richtig sehe handelt es sich nicht um einen TButton, sondern TxiButton.
Der muss sich jetzt aber nicht zwingend so verhalten wie ein TButton.
Das heißt jetzt?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#15

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 14:41
@xzise: ei doch so gut und häng Deinen Code samt zugehöriger dfm an Deinen Beitrag an.
Sowas läst sich in der IDE doch wesentlich besser durchgucken, als im Browser.

Gruß

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 14:43
Ich denk mal fogendes. Der Grund ist recht einfach:

FadeOutOnClose ist am Anfang mit False initialisiert (Standard für Boolean-Felder). Der Button hat am Anfang den Text Deactivate fade out on close (Im OI gesetzt). Jetzt klickst Du den Button und FadeOutOnClose wird auf True gesetzt. Und jetzt wird der Text wieder auf Deactivate fade out on close gesetzt. Beim zweiten Klicken wird FadeOutOnClose wieder auf False gesetzt und jetzt ändert sich erstmalig der Text.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#17

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 14:50
Zitat von sniper_w:
Ich tippe auf das falsche Anfangswert.
Zitat von sakura:
Ich denk mal fogendes. Der Grund ist recht einfach:

FadeOutOnClose ist am Anfang mit False initialisiert (Standard für Boolean-Felder). Der Button hat am Anfang den Text Deactivate fade out on close (Im OI gesetzt). Jetzt klickst Du den Button und FadeOutOnClose wird auf True gesetzt. Und jetzt wird der Text wieder auf Deactivate fade out on close gesetzt. Beim zweiten Klicken wird FadeOutOnClose wieder auf False gesetzt und jetzt ändert sich erstmalig der Text.

......
Ist das an sich nicht das selbe?

Nehmen wir mal an das es so ist:
  • 1. Zeile FOOC
    2. Zeile Text
  • false
    Deaktivate
    = klick =
  • true
    Deaktivate
    = klick =
  • false
    Aktivate
    = klick =
  • true
    Deaktivate
    = klick =

So meinst du das oder?
Aber so ist es (leider) nicht:
  • Activate
    = klick =
  • Activate
    = klick =
  • Deactivate
    = klick =
  • Deactivate
    = klick =
Und so weiter...

@ Anhang: TXiComponenten werden benötigt!
Angehängte Dateien
Dateityp: zip settings_108.zip (4,6 KB, 4x aufgerufen)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#18

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 15:00
Zitat von sakura:
...
Genau.

Und um so etwas zu vermeiden Initialisiert man solche globalen Werte gleich. Das geht zB. im Create (zB.: TFormX.FormCreate(...).

Wenn man es Einfacher haben will kann man auch die Tags der Komponenten missbrauchen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  // - alles was grösser oder keiner als Null ist ist wahr
  // - Null ist Unwahr

  Button1.Tag := not Integer( LongBool(Button1.Tag) );

  Button1.Caption := inttostr(Button1.Tag);
end;
Die Tags sind mit 0 (Null) voreingestellt.

Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#19

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 15:02
Habt ihr nicht gemerkt, dass es daran nicht gelegen haben kann ?

Man könnte es machen, aber da die Form eh über Execute aufgerufen wird, benötigt man es ja nicht im Create...

[edit]In der Mainfrm:
Delphi-Quellcode:
procedure TfrmMain.xiSettingsClick(Sender: TObject);
begin
 with TfrmSettings.Create(self) do
 begin
   try
     if Execute(FadeOutOnClose, True, 0, FadeTime) then begin
       FadeTime := GetFadeTime;
       FadeOutOnClose := getfadeOutOnClose;
       Crossfade := getCrossfade;
     end;
   finally
     Free;
   end;
 end;
end;
[/edit]
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#20

Re: Boolean ändert nicht seinen Wert (?)

  Alt 30. Jul 2006, 15:31
Wer garantiert dir das die Variable mit dem richtigem Wert initialisert wird ?

Wenn ich in die Delphihilfe gucke finde ich sowas:

Zitat:
Die Lösung besteht entweder darin, Zuweisungen zu allen Quelltextpfaden hinzuzufügen, oder die Variable bereits vor einer Bedingungsanweisung oder einem try-except-Konstrukt zuzuweisen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz