![]() |
Boolean ändert nicht seinen Wert (?)
Delphi-Quellcode:
FOOC ist ein Boolean und der andere ist ein Button.
FadeOutOnClose := not FadeOutOnClose; // = FOOC
if FadeOutOnClose then xiFadeOutOnClose.Caption := 'Deactivate fade out on close' else xiFadeOutOnClose.Caption := 'Activate fade out on close'; Wenn ich nun auf dem Button klicke (der Code ist in der Buttonprozedur) muss ich zweimal klicken um den Status zu ändern.... Ich habe kA warum :( |
Re: Boolean ändert nicht seinen Wert (?)
Ich tippe auf das falsche Anfangswert.
|
Re: Boolean ändert nicht seinen Wert (?)
Ich weiß auch nicht genau, was da schief läuft, aber kann es sein, dass du
Delphi-Quellcode:
erst nach der if-Abfrage aufrufen solltest? Nur so könnte ich mir das nun erklären.
FadeOutOnClose := not FadeOutOnClose;
|
Re: Boolean ändert nicht seinen Wert (?)
Wi ost FadeOutOnClose deklariert?
|
Re: Boolean ändert nicht seinen Wert (?)
Nein, dass kann es nicht sein, weils immer passiert... Also selbst wenns geändert ist, dann muss ich wieder 2x klciken.
Zitat:
Zitat:
|
Re: Boolean ändert nicht seinen Wert (?)
Delphi-Quellcode:
So finde ich es etwas logischer und übersichtlicher.
if FadeOutOnClose then
begin xiFadeOutOnClose.Caption := 'Deactivate fade out on close' FadeOutOnClose:=false; end; else begin xiFadeOutOnClose.Caption := 'Activate fade out on close'; FadeOutOnClose:=true; end: Grüße Klaus |
Re: Boolean ändert nicht seinen Wert (?)
Kann ich mir auch nicht erklären, funktioniert doch? Poste mal etwas mehr Code.
|
Re: Boolean ändert nicht seinen Wert (?)
@Klaus01: Übersichtlicher und Logischer ? Von mir aus. Aber der Code hat die gleiche Bedeutung, wie der andere Code.
|
Re: Boolean ändert nicht seinen Wert (?)
Zitat:
Wird der Wert erst beim 2. Mal geändert oder erst beim 2. Mal die Buttonbeschriftung geändert. |
Re: Boolean ändert nicht seinen Wert (?)
Moin Fabian,
Dein Code funktioniert bei mir problemlos. Der Fehler muss an einer anderen Stelle liegen. |
Re: Boolean ändert nicht seinen Wert (?)
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:
* für mkinzler: Mir war klar das du wo meintest... :D Nur weiß ich nicht wie man den Bereich da oben beschreibt ^^
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. |
Re: Boolean ändert nicht seinen Wert (?)
Zitat:
|
Re: Boolean ändert nicht seinen Wert (?)
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. |
Re: Boolean ändert nicht seinen Wert (?)
Zitat:
|
Re: Boolean ändert nicht seinen Wert (?)
@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 |
Re: Boolean ändert nicht seinen Wert (?)
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. ...:cat:... |
Re: Boolean ändert nicht seinen Wert (?)
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Nehmen wir mal an das es so ist:
So meinst du das oder? Aber so ist es (leider) nicht:
@ Anhang: TXiComponenten werden benötigt! |
Re: Boolean ändert nicht seinen Wert (?)
Zitat:
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:
Die Tags sind mit 0 (Null) voreingestellt.
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; :stupid: |
Re: Boolean ändert nicht seinen Wert (?)
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:
[/edit]
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; |
Re: Boolean ändert nicht seinen Wert (?)
Wer garantiert dir das die Variable mit dem richtigem Wert initialisert wird ?
Wenn ich in die Delphihilfe gucke finde ich sowas: Zitat:
|
Re: Boolean ändert nicht seinen Wert (?)
Dass die Variable auf True steht ist jedenfalls weit wahrscheinlicher, immerhin gilt 0 = false und alles andere = true...
|
Re: Boolean ändert nicht seinen Wert (?)
Hallo,
Auch auf die Gefahr hin, dass mein Beitrag komplett überflüssig ist, versuch's mal so(Damit löst sich das Problem der Initialisierung):
Delphi-Quellcode:
procedure SomeButtonClick(Sender: TObject);
begin FadeOutOnClose := not FadeOutOnClose; // = FOOC if FadeOutOnClose then begin xiFadeOutOnClose.Caption := 'Deactivate fade out on close'; end else begin xiFadeOutOnClose.Caption := 'Activate fade out on close'; end; end;
Delphi-Quellcode:
Gruß,
procedure CustomFormCreate(Sender: TObject);
begin FadeOutOnClose := False; SomeButtonClick(Self); // Hier wird der negative Wert des FadeOutOnClose Booleans initialisiert. // Das heisst, setzt du hier FadeOutOnClose auf False steht auf dem Button 'Deactivate fade out on close' // Der Button sollte jetzt vorhersehbar reagieren end; Max |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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