Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
08.02.2012, 02:50:04
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Einsteiger Forum
| | |-+  Up Down Anzeige funktioniert nicht
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: Up Down Anzeige funktioniert nicht  (Gelesen 1593 mal)
delphi6
Newbie
*
Offline Offline

Beiträge: 31


« am: 02.08.2009, 16:13:31 »

Hallo Zusammen

habe einen Player auf dem ich nur 6 zeilen anzeigen kann. Es sollen aber mit einem Drehregler (Taste U = UP, D=Down) die beiden Prozeduren: LW_UP, LW_Down gestartet werden. der Text in den Linien soll dan auf und ab gescrollt werden. Die Daten befinden sich im globalen Array LW[1..k]. Die Funktion LW_Down funktioniert aber ie Funktion LW_Up kriege ich nicht hin. Warum ich überhauupt die Schlaufe mit dem 1..6 = l machen muss dass überhaupt etwas angezeigt wird weiss ich nicht. Sieht jemand was ich falsch mache?
 
--------------------------------------------------------------------------------------
procedure LW_Up;
  var l,m:integer;
  begin
    // Einen weiterschalten und Kursor ändern
    // k -> maximale Anzahl laufwerke   z.B. 10
    // j -> Scheifenvariable -> Cursorposition des Drehreglers -> Begin mit J :=1
    // m -> 6 Linien ausfüllen  -> Nur 6 zeilen zur Anzeige vorhanden (Daten ins im Array LW[k] (1..10)
    if j<1 then j := k;
    if j>k then j := 1 else j := j - 1;
    // Showmessage('Pause 1');
    for l := 1 to 6 do begin         // 6 Linien füllen
      for m := j to j+l do begin     // 6 aus 10 daten befüllen
        TButton(MediaplayerDLGLaufwerk.MMediaplayer.FindComponent('AlbumTitel' + IntToStr(l))).Caption := IntToStr(LW[m].DriveTypeInt) + ' ' + LW[m].DriveTypeStr + ' j ' + Inttostr(j)+ ' m ' + Inttostr(m);
        TButton(MediaplayerDLGLaufwerk.MMediaplayer.FindComponent('Zeit_Verz' + IntToStr(l))).Caption := LW[m].Drivestring;
        // Showmessage('Pause 2');
        if m>=k then  j := 1;
        // if m<1 then  j := k;
      end;
    // Showmessage('Pause 3');
    end;
  end;
Gespeichert
delphi6
Newbie
*
Offline Offline

Beiträge: 31


« Antworten #1 am: 04.08.2009, 22:20:37 »

das ist die Downroutine die läuft. Leider schaffe ich es nicht diese nach LW_UP zu adaptieren. Vielleicht schafft es ja jemand der frisch erhohlt von den ferien retour gekommen ist :-)

procedure LW_Down;
  var l,m:integer;
  begin
    // Einen weiterschalten und Kursor ändern
    if j<1 then j := k else j := j + 1;
    if j>k then j := 1;
    for l := 1 to 6 do begin
      for m := j to J+l-1 do  begin
        TButton(MediaplayerDLGLaufwerk.MMediaplayer.FindComponent('AlbumTitel' + IntToStr(l))).Caption := IntToStr(LW[m].DriveTypeInt) + ' ' + LW[m].DriveTypeStr;
        TButton(MediaplayerDLGLaufwerk.MMediaplayer.FindComponent('Zeit_Verz' + IntToStr(l))).Caption := LW[m].Drivestring;
        if m>=k then j := k+l-1; //
        if m<1 then  j := 1;
      end;
    end;
  end;
Gespeichert
delphi6
Newbie
*
Offline Offline

Beiträge: 31


« Antworten #2 am: 05.08.2009, 00:19:04 »

So geht es nun einigermassen, leider ist es kein suberes Round Robin sondern der Kursor(Linie) springt:

procedure LW_Up;
  var l,m:integer;
  begin
    // Einen weiterschalten und Kursor ändern
    // k -> maximale Anzahl laufwerke   z.B. 10
    // j -> Scheifenvariable -> Cursorposition des Drehreglers -> Begin mit J :=1
    // m -> 6 Linien ausfüllen  -> Nur 6 zeilen zur Anzeige vorhanden (Daten ins im Array LW[k] (1..10)
    j := j - 1;
    if j<1 then j := 6-1;
    if j>k then j := 1;
    for l := 1 to 6 do begin         // 6 Linien füllen
      for m := j to j+l-1 do begin     // 6 aus 10 Daten befüllen
        TButton(MediaplayerDLGLaufwerk.MMediaplayer.FindComponent('AlbumTitel' + IntToStr(l))).Caption := IntToStr(LW[m].DriveTypeInt) + ' ' + LW[m].DriveTypeStr + ' j ' + Inttostr(j)+ ' m ' + Inttostr(m);
        TButton(MediaplayerDLGLaufwerk.MMediaplayer.FindComponent('Zeit_Verz' + IntToStr(l))).Caption := LW[m].Drivestring;
        if m>=k then break;
      end;
    end;
  end;
Gespeichert
Loïs Bégué
Global Moderator
Hero Member
*****
Offline Offline

Beiträge: 1718



WWW
« Antworten #3 am: 12.08.2009, 11:27:51 »

Schau mal.
Hier wird die Liste nicht weiter rollen.
Willst Du dass sie "zurückspringt", dann passe die Bedingungen BED1 und BED2 an...


Bemerkung:
Durch "High(LW)" und "Low(LW)" kann man die Definition vom LW-Array anpassen, ohne den restlichen Code zu ändern.


Ach ja... Versuche mal deine Variablen "sprechende" Namen zu geben... es liesst sich einfacher ;)

Code:
var
  J: Integer = 0;
  LW: array[1..10] of String;

procedure TMF.LW_Down;
var
     Loop                 : Integer;
     Current_List_Offset  : Integer;
begin
     Current_List_Offset := (J mod (High(LW) - 6 + Low(LW) ));
     for Loop :=1 to 6 do Begin
         Memo1.Lines.Add( LW[Current_List_Offset + Loop] );
         End;
end;

procedure TMF.LW_Up;
var
     Loop                 : Integer;
     Current_List_Offset  : Integer;
begin
     Current_List_Offset := (J mod (High(LW) - 6 + Low(LW) ));
     for Loop :=1 to 6 do Begin
         Memo1.Lines.Add(LW[Current_List_Offset + Loop]);
         End;
end;


procedure TMF.Button1Click(Sender: TObject);
begin
    Inc(J);
    If (J div (High(LW) - 6 + Low(LW) ))=1 then Dec(J); // BED1
    memo1.Clear;
    LW_Down;
end;

procedure TMF.Button2Click(Sender: TObject);
begin
    Dec(J);
    if J<0 then J := 0; // BED2
    memo1.Clear;
    LW_Up;
end;
« Letzte Änderung: 12.08.2009, 11:29:46 von Loïs Bégué » Gespeichert

Prof.Y
Arpoon
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS