Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Set Of problem: macht aus einem , einen .. warum ?


mimi - Mi 13.04.05 20:01
Titel: Set Of problem: macht aus einem , einen .. warum ?
Hallo,
ich habe folgende aufzhälung:


Delphi-Quelltext
1:
2:
3:
TJvCapBtnStyle = (capClose, capMax, capMin, capRestore, capHelp);
  TJvCapBtnStyles = set of TJvCapBtnStyle;
  TJvDrawPosition = (dpLeft, dpTop, dpRight,


und ich nutzte ihn folgendermaßen

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 if Button = CapMin then begin
    JvCaptionPanel5.Height:=151;
    JvCaptionPanel5.Buttons:=[];
    JvCaptionPanel5.Buttons:=[capClose,capMax];

  end
  else begin
    if Button = CapMax then begin
      JvCaptionPanel5.Height:=257;
      JvCaptionPanel5.Buttons:=[capClose,CapMin];
    end;
  end;
....

Jetzt kommt es zu den fehler, das es nach ca 4 mal (einfach klick) klicken nun doppelklick machen muss damit dieser code funktioniert.

im debuger habe ich mir den wert Buttons angezehen und folgendes gesehen:
beim ersten mal steht da , (richtig) und nach 4 mal klicken steht da ...
z.b.
Buttons:=CapClose,CapMin -> richtig(bei den ersten malen)
Buttons:=CapClose..Capmin -> Falsch(bei ca 4 mal einfch klick, wird ein doppel klick notwendig)

ich hoffe ihr habt das problem verstanden.


mimi - So 17.04.05 11:03

Schade: weißt wirklich keine eine antwort ?
warum das Programm aus:

Delphi-Quelltext
1:
JvCaptionPanel5.Buttons:=[capClose,capMax];                    

dies macht nach einigen klicken ? das steht doch nirgenwo im code drin.

Delphi-Quelltext
1:
JvCaptionPanel5.Buttons:=[capClose..capMax];                    


delfiphan - So 17.04.05 13:23

Dein Codeschnipsel reicht wohl einfach nicht, um den Fehler zu reproduzieren. Am besten du postest einen verkürzten Code deines Programmes, den sich alle direkt ins Delphi kopieren können.


mimi - So 17.04.05 16:51

ja ok


Critter - Mo 25.04.05 09:05

Hallo,

ich glaube deine Problemeinschätzung ist nicht ganz korrekt. Ich habe in deinem Projekt mal eine tListbox hinzugefügt und mitprotokollieren lassen, welcher Button an die Funktion übergeben wird. Dabei fällt auf, dass bei jedem Aufruf der OnClick Funktion der richtige Button übergeben wird. Leider wird aber die OnClick nicht zuverlässig aufgerufen. Ich schätze du setzt da auf eine unzuverlässige Komponente, ein Problem, das mir bei den Jedis (inklusive Indy) schon häufiger mal aufgefallen ist.
Eventuell kannst du sie ja auf mehr Zuverlässigkeit optimieren.

Wenn du das ganze überprüfen möchtest schmeiße eine tListbox auf dein Formular und ergänze deine OnClick so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.JvCaptionPanel1ButtonClick(Sender: TObject;
  Button: TJvCapBtnStyle);
begin
 ListBox1.Items.Insert(0, IntToStr(Ord(Button)));
 if Button = CapMin then begin
    JvCaptionPanel1.Height:=151;
    JvCaptionPanel1.Buttons:=[];
    JvCaptionPanel1.Buttons:=[capClose,capMax];
  end
  else begin
    if Button = CapMax then begin
      JvCaptionPanel1.Height:=257;
      JvCaptionPanel1.Buttons:=[capClose,CapMin];
    end;
  end;
end;


Critter


mimi - Do 23.06.05 12:34

-> Tut mir leid das ich erst jetzt antwortet.... hatten den beitrag aus den Augen verloren.

OnClick Welches onKlick meinst du jetzt das von den Panel oder des von der ListBox...
Gibt es eine möglihckeit diese Schwäche zu beheben ? bzw. weg zu machen ?

damit ich die richtig verstehe:
du meist warcheinlich das CaptionPanel und jedes mal wenn ich also auf ein button oben klicke wird/kann es passieren das das ereignis onClick vom Button nicht richtig ausgeführt wird.
Wenn das so ist, gibt es ein updatet der komponente oder hat es jemmand schon behoben ????


opfer.der.genauigkeit - Do 23.06.05 12:48

Hiho,

Ich kann das Programm nicht testen, hab keine Jedi :) (derzeit)

Aber folgendes ist mir aufgefallen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
 if Button = CapMin then begin
    JvCaptionPanel1.Height:=151;
    JvCaptionPanel1.Buttons:=[];
    JvCaptionPanel1.Buttons:=[capClose,capMax];

  end
  else begin
    if Button = CapMax then begin
      JvCaptionPanel1.Height:=257;
      JvCaptionPanel1.Buttons:=[capClose,CapMin];
    end;
  end;


Ich weiß nicht ob es die Lösung ist, kanns ja nicht testen aber
zähl mal die Zeilen an Code, die CapMin aufweist und die CapMax aufweist.

Evtl. ist das die Lösung deines Problems.. wenn nicht.. muß ich wohl JEDI
installieren :)

Hf


mimi - Do 23.06.05 15:12

leider nicht !
ich habe jetzt folgendes getestet( an einem andren panel)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 if Button = CapMin then begin
    JvCaptionPanel7.Height:=167;
    JvCaptionPanel7.Buttons:=[];
    JvCaptionPanel7.Buttons:=[capClose,capMax];

  end
  else begin
    if Button = CapMax then begin
      JvCaptionPanel7.Height:=23;
      JvCaptionPanel7.Buttons:=[];
      JvCaptionPanel7.Buttons:=[capClose,CapMin];
    end;
  end;

immer noch das gleiche wie voher