Új hozzászólás Aktív témák
-
czappa
aktív tag
Sziasztok!
Írtam egy egyszerű mp3 lejátszót, aminek a nehezebb részét természetesen a Delphi csinálta meg helyettem (MediaPlayer) én csak könyvtár/file megnyitást, ilyesmit.
Van egy sima listboxom, amiben a lejátszandó file-ok vannak. A kérdésem, hogy hogyan tudnám megcsinálni, hogy ha lejátszotta az egyiket, akkor ugorjon a következőre.
Két dolgon gondolkodtam:
1) Használom a mediaplayer saját gombjait, ám ekkor honnan tudjan, mikor fejeződött be az egyik szám lejátszása?
2)létrehozok én gombokat (és én használom a wait, play, stb metódusokat), akkor vmi ciklus szerűvel meg lehetne oldani, a gond csak az hogy ilyenkor ''megfagy'' a progi, tehát elvben még az exit-re sem tudok klikkelni...
Remélem értitek mit mondok , aki tud kérem segítsen. -
czappa
aktív tag
válasz Jester01 #1123 üzenetére
Megnéztem, amit linkeltél, sajnos nem ezt kerestem; Ez akkor következik be, ha a user ráklikkel a stopra (pause-ra stb.-re). De nekem valami olyasmi kéne, ami tudatja, hogy véget ért a szám lejátszása.
A vicc az, hogy az általad linkelt oldalon még van is egy cikk a lejátszóról, de ilyet ott sem találtam.
A MediaPlayer1.Notify a delphi helpje szerint csak a mediaplayer gombjaira reagálnak -
czappa
aktív tag
válasz Jester01 #1126 üzenetére
Igen.
Két megoldást próbáltam, az egyik, hogy bár van mediaplayer, de nem a saját gombjait fogja használni a user, hanem én hozok létre gombokat (lejátszás stb.) és onClick eventre csinál valamit. Ezzel az a baj, hogy ha én pötyögöm be, hogy Wait:=true; Play; akkor a szám végéig nem tudok semmit sem csinálni, a progival (kilépni, stopra klikkelni, a formot áthelyezni, semmit)
A másik lehetőség az lett volna, hogy a mediaplayer saját gombjait használja a user, ám ez esetben fogalmam sincs hogyan mennek a ''dolgok'', továbbá itt nem értem mi van:
procedure TForm1.MediaPlayer1Click( stb...
begin
case Button of
btPlay :
begin
Label2.Caption:='111';
end;
btPause:
stb...
itt a Label2.Caption:='111'; sor csak proba miatt van, de sajnos ez történik meg előbb, mint a szám lejátszása, ill gondolom Borland képes volt megoldani azt, hogy egy szám lejátszás ne fogja meg az egész progit, túl. képp nekem is erre lenne szükséges, vagy tudnom kéne, milyen tulajdonsága változik meg a mediaplayernek ha befejezte a szám lejátszását. (de inkább az előbbi jönne jól, utóbbira néztem a helpet, de nem jöttem rá)
A legnagyobb gond, hogy nem értek hozzá, eddig két gyakom volt delphiből (persze ilyeneket nem vettünk).
''mint másik szálról hívni''
nos ez a baj, ezt már pl. nem értem, na mindegy majd talán máskor visszatérek még a progira.
[Szerkesztve] -
czappa
aktív tag
Sziasztok!
Lenne néhány kérdésem, erre szeretnék segítséget kérni:
1) Ma tannultuk suliban a kivételkezelést Delphiben, de az én gépemen nem akart működni. Megkérdeztem a tanárt, nem tudott segíteni, viszont elmondta, hogy az előző csoportjában is volt amelyik gépen nem működött, máshol igen. Előző nap itthon is próbálkoztam vele, de itt sem sikerült, most ezt másolom be:
var r:real;
o:Integer;
begin
o:=0;
try
r:=5/o;
//ShowMessage(FloatToStr(r));
except
on EZeroDivide do ShowMessage('Hiba: 0-val való osztás!');
on EDivbyZero do ShowMessage('Hiba: 0-val való osztás!');
end;
end;
Ha a ShowMessage(FloatToStr(r)); részt commentbe rakom, SEMMI nem történik, ha pedig kiveszem a kommentet, akkor hibával elszáll a progi, de a kivételkezelés nem történik meg. Mi a hiba?
2)
Nem tudok [ jelet tenni sem pedig {-t (erre egy brakepoint list ablak jön be), [ ] jeleket ALT+91/93-al szoktam tehát tenni. De mit lehet ez ellen tenni?
A vicc, hogy egyszer találtam erre vmi file-t ami megoldotta a problémát (állítólag) csak nem tudtam importálni, most meg már azt se tudom, mi volt a file.
Aki tudja plíz dobjon egy linket és azt is írja meg, hogy hogyan lehet a működésre bírni.
Ezek lennének a problémáim, előre is köszi. -
czappa
aktív tag
válasz Jester01 #1183 üzenetére
Én úgy tudom, hogy nem kell oda begin-end, mert kapcsolóként működik és a végén az egész try-except részt zárja egy end; (de persze most kipróbáltam és minden maradt a régiben, így is).
A suliban amikor példaprogit írtam, akkor ''rendes'' számokat olvastattam be Edit mezőről, ott is ez volt.
VISZONT! és ez elég lol - elnézést is kérek érte:
Tehát, oké bejön ez a durva hibaüzi, de utána ha nem run->program resetet választok, hanem run->run-t akkor megy tovább a progi és meg is jelenik a ShowMessage ablaka...
Mert ugya progi ott ''kiakadt'' csak úgy tovább nem tudtam menni ezért kellett a run menüpont.
Ám ez kezdett gyanus lenni, így megnéztem, mi van ha nem a Delphiből futtatom a progit, hanem az .exe filet indítom. Nos ekkor tökéletesen működik... lol engem az zavart meg h a fordítóból ilyenkor elszált a progi, feljött a delphi saját hibaüzije, én meg csak a run-> menüvel tudtam tovább menni.
Azért köszi, és bocs h ilyennel fárasztottalak, ez azért tanunságos volt.
Viszont a másik problémámra tud vki. vmi. megoldást?
[Szerkesztve] -
czappa
aktív tag
Sziasztok!
Már megint elakadtam, most a mutatókkal gyűlt meg a bajom.
Suliban volt szó egyirányú listákról; ehhez írtam egy kis progit, ami még csak annyit csinál, hogy lehet a végéhez felvenni egy új elemet és az egészet listázni (kiíratni egy listboxba).
Ez szép és jó és elvileg működik is ([link]), ám én balga arra gondoltam, hogy nem recorddal kéne megcsinálni hanem osztály példányokkal ha már úgyis oop-t tanulok.
Itt azonban már nem mentek olyan simán a dolgok. Ha csak egy elemet veszek fel a listába, akkor minden működik rendesen, azonban több elemnél a kilistázáskor a progi bekerül egy végtelen ciklusba és már két napja ezen rágódok és nem tudok rájönni sehogy se; ennek itt a linkje:
[link]
Azért bemásolok ide kódrészeket:
private
fej, p: point;
uj: TRek;
ujertek: integer; (...)
procedure TForm1.Button1Click(Sender: TObject);
begin
//beszúrás a lista végéhez
ujertek:=StrToInt(Edit1.Text);
Edit1.Text:='';
uj:=TRek.Create(ujertek);
uj.setKov(nil);
if fej=nil then //ha nincs még eleme a listának
begin
fej:=@uj;
end
else //ha a fej nem nil-re mutat, azaz ha van már eleme a listának
begin
p:=fej;
while p.getKov<>nil do
begin
p:=p^.getKov;
end;
p^.setKov(@uj);
end;
Edit1.SetFocus;
end;
procedure TForm1.ListazClick(Sender: TObject);
var i: integer; //
begin
for i:=ListBox1.Count downto 0 do //a LsitBox1 elemeinek törlése
ListBox1.Items.Delete(i);
p:=fej;
while p<>nil do
begin
Listbox1.Items.Add( IntToStr(p^.getTart) );
p:=p^.getKov;
end;
end;
és a TRek osztály:
unit Rek;
interface
type
point = ^TRek;
TRek=class
private
tart : Integer ;
kov : point;
public
constructor create(tart: integer);
procedure setKov(kov: point);
function getKov: point;
function getTart: integer;
end;
Végülis a lényegi részeket fentebb kimásoltam.
[Szerkesztve]
[Szerkesztve] -
czappa
aktív tag
Ja nem, nem. Én magamat jellemeztem lol-lal, nem a delphi megoldását - mert végülis valahol logikus h bejön a delphi saját hibaüzenete, csak én nem értettem.
Ezt most csak a félreértések elkerülése végett írtam.
És köszi a tippet (a belső hibaüzenet kikapcsolására)!
[Szerkesztve] -
czappa
aktív tag
Sziasztok!
Egy kérdésem lenne (delphi adatbáziskeresés, dbaseIV).
Előbb legyen a példa aztán a kérdés:
(kedden zh, sürgős lenne)
''147. FELADAT
Készítsen programot az alábbi menüpontokkal:
a.) Egy autó adatai
TTABLE típusú komponens használatával egy form-on jelenítse meg egy adott rendszámú autó adatait. A pontos rendszámot egy szerkesztőmezőben kelljen beírni, ha nincs ilyen, azt írja ki a program.
A megtalált rekord feldolgozásával a fenti form-on írja ki a program azt is, hogy az autó melyik kategóriába tartozik. Gyors, ha végsebessége 200 km/ó feletti, átlagos a 100-200 km/ó végsebesség, lassú a 100 km/ó alatti.
b.) Fogyasztás
Listázza ki egy másik form-on egy listaboxban azon autók rendszámát, melyek átlagfogyasztása egy-egy Editmezőben adott alsó és felső határok között van.
c.) Javítások
Egy listaboxban listázza ki, hogy adott sorszámú autó mikor volt javítóműmelyben. (A rendszámot kiválasztva jelenjen meg az összes (lehet több) dátum.)
A táblák
Az alábbi dBaseIV típusú adattáblákat készítse el:
KOCSI.DBF
SORSZAM N 5
RENDSZAM C 7
VEGSEB N 3
ATLFOGY N 5 2
TULAJ C 30
SZERVIZ.DBF
DATUM D
ALKRESZ C 30
SORSZAM N 5
A SZERVIZ.DBF SORSZAM mezője a KOCSI tábla hasonló mezőjére utal. Töltse fel a táblákat adatokkal.''
A dolog nagy részét értem, egy helyen akadok el;
''A SZERVIZ.DBF SORSZAM mezője a KOCSI tábla hasonló mezőjére utal.''
Mert ugye két táblázatom van, ebből a sorszám field mindkettőben szerepel és ki kéne listáznom a rendszám alapján (1. tábla), hogy hányszor volt szervízben a kocsi (2. tábla - a rendszám mező, ugye csak az első táblában szerepel).
Hogy ''kötöm'' össze?
Ez lenne a nagy bajom, a segítséget előre is köszönöm. -
czappa
aktív tag
-
czappa
aktív tag
Sziasztok!
Nem tudom a kérdésemre létezik-e megoldás, de hátha:
1)Azt szertném megcsinálni delphiben, hogy ha tudom a program nevét, akkor el tudjam dönteni, hogy telepítve van-e a gépre, és ha igen, akkor
2)Meg tudom e nézni mi a telepített program teljes elérési helye. Itt nem csak arra gondolok, hogy mondjuk c:\program files\etc.. vagy d:\program files\etc... hanem mondjuk ha a program telepítési könyvtárában van email cím, vagy account, tehát 1000 usernél 1000 különböző helyre történhetett a telepítés, én meg mondjuk egy alkönyvtár egy file-ét akarom bizgerálni.
Helyenként talán furcsán fogalmaztam, de azért remélem érthető volt, előre is köszi. -
czappa
aktív tag
Sziasztok!
Függvénynek/eljárásnak ugye nem adható át (dinamikus)tömb, mert csak egyszerű típus adható át, de ez kivédhető, azzal, hogy:
type
TTomb = Array of integer;
És ekkor egy TTomb típusú változót adok át.
Na én most ugyen ezt szeretném, csak nem ''sima'' függvénynek, hanem, egy osztály konstruktorának átadni, de ez az üzenet fogad:
''Incompatible types''
Próbáltam azt is, hogy a tömb nélkül hívnám a konstruktort (magyarán csináltam egy másik konstruktort is - overload), és az objektum egy metódusát hívom, hogy adjam át a tömböt, de a hibaüzi maradt.
megj.: a
type
TTomb = Array of integer;
természetesen benne van a fő unitban is (ahonnan megy a függvényhvás), és az osztályban is, amit példányosítani szeretnék.
Mi a megoldás?
A segítséget előre is köszönöm.
[Szerkesztve]
Új hozzászólás Aktív témák
- LG NanoCell 55NANO766QA Halvány píxel csík
- Philips 58PUS8545/12 1 ÉV GARANCIA Játék üzemmód
- Tyű-ha! HP EliteBook 850 G7 Fémházas Szuper Strapabíró Laptop 15,6" -65% i7-10610U 32/512 FHD HUN
- Bomba ár! HP EliteBook 840 G5 - i5-8G I 8GB I 128GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- The Last of Us Part I Ps5