Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   UpDownButton und TMediaPlayer? (https://www.delphipraxis.net/195463-updownbutton-und-tmediaplayer.html)

Demyxa 2. Mär 2018 09:02

UpDownButton und TMediaPlayer?
 
Ich versuche aktuell was kleines nettes zu programmieren, und benötige dafür einen MediaPlayer.
Wie dieser funktioniert habe ich bereits herausgefunden, aber ich nutze auch einige UpDown Button
damit das Programm nicht allzu hässlich aussieht.

Der MediaPlayer ist innerhalb des Formulars nicht einmal sichtbar, sprich, die Buttons die mit ihm
kommen werden nicht verwendet, er ist einfach nur zum spielen von Dateien existent.



[dcc32 Fehler] Inkompatible Typen: 'TUDBtnType' and 'TMPBtnType'

Ist der Fehler der mich beunruhigt.
Alles was ich daraus erfahre ist, dass ich keine UpDown Buttons nutzen kann,
wenn ich gleichzeitig einen MediaPlayer nutzen will.

Ist das die harte Wahrheit oder kann man sich da herum schummeln?

TiGü 2. Mär 2018 09:36

AW: UpDownButton und TMediaPlayer?
 
Quelltext von der betreffenden Stelle? :glaskugel:

Demyxa 2. Mär 2018 09:41

AW: UpDownButton und TMediaPlayer?
 
Der ganze Spaß geht ab hier los

Code:
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
if button = btNext then
  begin
    if ATP = 0 then
    begin
      Label7.Color:=clRed;
    end
    else
    STG:=STG + 1;
    CalcATP;
    CalcATK;
    Label2.caption:= 'ATK: ' + FloatToStr(ATK);
    Label3.Caption:= 'Stärke: ' + FloatToStr(STG);
  end;
if button = btprev then
  begin
    STG:= STG - 1;
    CalcATK;
    CalcATP;
    Label2.caption:= 'ATK: ' + FloatToStr(ATK);
    Label3.Caption:= 'Stärke: ' + FloatToStr(STG);
  end;
end;

procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);
begin
if button = btNext then
  begin
    if ATP = 0 then
    begin
    Label7.Color:=clRed;
    end
    else
    ITG:=ITG+1;
    CalcATP;
    CalcMAG;
    CalcATK;
      Label4.Caption:= 'Intelligenz: ' + FloatToStr(ITG);
      Label6.Caption:= 'MAG:' + FloatToStr(MAG);
      Label2.caption:= 'ATK: ' + FloatToStr(ATK);
  end;
if button = btprev then
   begin
   ITG:=ITG-1;
    CalcATP;
    CalcMAG;
    CalcATK;
      Label4.Caption:= 'Intelligenz: ' + FloatToStr(ITG);
      Label6.Caption:= 'MAG:' + FloatToStr(MAG);
      Label2.caption:= 'ATK: ' + FloatToStr(ATK);
end;
end;

procedure TForm1.UpDown3Click(Sender: TObject; Button: TUDBtnType);
begin
if button = btNext then
  begin
    CalcATP;
    if ATP = 0 then
    begin
    Label7.Color:=clRed;
    end
    else
    KON:=KON+1;
    CalcATP;
    CalcHP;
      Label8.Caption:= 'Konstitution: ' + FloatToStr(KON);
      Label10.Caption:= 'HP: ' + FloatToStr(HP);
  end;
if button = btprev then
   begin
    KON:= KON-1;
    CalcATP;
    CalcHP;
      Label8.Caption:= 'Konstitution: ' + FloatToStr(KON);
      Label10.Caption:= 'HP: ' + FloatToStr(HP);
end;
end;

procedure TForm1.UpDown4Click(Sender: TObject; Button: TUDBtnType);
begin
if button = btNext then
  begin
    CalcATP;
    if ATP = 0 then
    begin
    Label7.Color:=clRed;
    end
    else
    WIL:=WIL+1;
    CalcATP;
    CalcMP;
      Label9.Caption:= 'Willenskraft: ' + FloatToStr(WIL);
      Label11.Caption:= 'MP: ' + FloatToStr(MP);
  end;
if button = btprev then
   begin
    WIL:= WIL-1;
    CalcATP;
    CalcMP;
      Label9.Caption:= 'Willenskraft: ' + FloatToStr(WIL);
      Label11.Caption:= 'MP: ' + FloatToStr(MP);
   end;
end;

end.

himitsu 2. Mär 2018 09:56

AW: UpDownButton und TMediaPlayer?
 
Ich denke mal es liegt an der Unitreihenfolge, im USES deiner Unit.

Wenn zwei Units einen gleichnamigen Typen veröffentlichen, dann erwischst du ohne Namespace (unitname.typname) immer den Typen aus der letzten Unit, in deiner Liste.

[add]
Zitat:

Quelltext von der betreffenden Stelle?
Und in welcher Zeile?

Zitat:

if button = btNext then
Gleichnamige Konstanten betrifft das auch. :angle:

Hobbycoder 2. Mär 2018 10:00

AW: UpDownButton und TMediaPlayer?
 
Sowohl in der Unit MPlayer als auch in ComCtrls gibt es btNext und btPrev.

Werden beide Units eingebunden, muss man ggf. die Konstanten direkt aus den Units holen (sonst entscheide wahrscheinlich die Reihenfolge in der USES-Klausel, aus welcher Unit die Konstante verwendet wird):

if button=Vcl.ComCtrls.btNext oder if button=Vcl.mplayer.btNext passend zum Sender wählen.

Demyxa 2. Mär 2018 10:00

AW: UpDownButton und TMediaPlayer?
 
Delphi zeigt mir jede Zeile die
Code:
if button = btNext then
oder
Code:
if button = btprev then
enthält als einen Fehler an.

Hobbycoder 2. Mär 2018 10:03

AW: UpDownButton und TMediaPlayer?
 
siehe meine Antwort.

Demyxa 2. Mär 2018 10:05

AW: UpDownButton und TMediaPlayer?
 
Hehe, hier ist das Problem, ich hab absolut keine Ahnung wovon du redest, ich
bin jetzt nicht zwingend der beste Delphi Programmierer :oops:

Hobbycoder 2. Mär 2018 10:12

AW: UpDownButton und TMediaPlayer?
 
Das steht in der Unit ComCtrls:
Delphi-Quellcode:
TUDBtnType = (btNext, btPrev);
Und das steht in er Unit MPlayer:
Delphi-Quellcode:
TMPBtnType = (btPlay, btPause, btStop, btNext, btPrev, btStep, btBack, btRecord, btEject);
Wie dir auffällt tauchen die Kontanten btNext und btPrev in beiden auf, sind aber unterschiedliche Type. Einmal Typ TUDBtnType und einmal TMPBtnType.
Ich nehme an in deiner USES steht MPlayer vor ComCtrls.
Wenn du jetzt bei der If-Abfrage deines UpDownButtons einfach Button mit btNext vergleichst, holt sich Delphi die erste Konstante mit dem Namen btNext und die ist dann dummerweise vom Typ TMPBtnType.
Beim Vergleich stellt Delphi fest, dass die Typen nicht zueinander passsen, daher der Fehler.

Schreibt du
Delphi-Quellcode:
if Button=Vcl.Comctrls.btNext
gibst du die Unit an, aus der die Konstante verwendet werden soll. Somit passen dann die Typen.

Äquivalent solltest du das dann beim OnClick im Mediaplayer, falls verwendet, ebenso machen.

Demyxa 2. Mär 2018 10:15

AW: UpDownButton und TMediaPlayer?
 
Aaaah, verstehe!
Das hat in der Tat das Problem gelöst, ich habe zu danken!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 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