Delphi mSum: case of-Befehle "stapeln"?

Dro'Doog

Lieutenant
Registriert
März 2007
Beiträge
705
Wir müssen in Informatik leider mit mSum in Delphi arbeiten, ... naja, alles halb so wild, ... wir sind gerade dabei ein Zeicheprogramm alá Paint zu programmieren. (Momentan ist "radius" noch sinnlos, aber das wird noch für Kreise gebraucht.)

Code:
program Zeichenprogramm_3;

uses
  mSum;

var pen : buntstift;
    structure : stift;
    screen : bildschirm;
    mouse : maus;
    board : tastatur;
    x : integer;
    breite : integer;
    radius : integer;

begin
  //Initialisierung
  screen := bildschirm.init;
  pen := buntstift.init;
  structure := stift.init;
  mouse := maus.init;
  board := tastatur.init;
  x := 0;
  breite := 1;
  radius := 1;

  repeat
   pen.bewegeBis(mouse.hPosition,mouse.vPosition);
    if mouse.istGedrueckt then
     pen.runter
    else
     pen.hoch;

    if board.wurdeGedrueckt then
     begin
      case board.zeichen of
       '0' : case board.zeichen of
              '3' : pen.radiere;
             end;
       '1' : pen.normal;
       '2' : pen.wechsle;
       //
       {'3' :
       '4' :
       '5' :
       '6' :
       '7' :
       '8' :
       '9' :
       '0' :
       'a' :
       'b' :
       'c' :
       'd' :
       'e' :
       'f' :
       'g' :
       'h' :
       'i' :
       'j' :
       'k' :
       'l' :
       'm' :
       'n' :
       'o' :
       'p' :
       'q' :
       'r' :
       's' :
       't' :
       'u' :
       'v' :
       'w' :
       'x' :
       'y' :
       'z' :}
       //
       'r' : pen.setzeFarbe(ROT);
       'b' : pen.setzeFarbe(BLAU);
       'y' : pen.setzeFarbe(GELB);
       's' : pen.setzeFarbe(SCHWARZ);
       'w' : pen.setzeFarbe(WEISS);
       'g' : pen.setzeFarbe(GRUEN);
       'f' : pen.setzeLinienBreite(50000000);
       'q' : x := 1;
       '+' : begin
              breite := breite + 1;
              pen.setzeLinienBreite(breite);
             end;
       '-' : begin
              if breite > 1 then
               begin
                breite := breite - 1;
                pen.setzeLinienBreite(breite);
               end;
             end;
       't' : screen.loescheAlles;
       'ä' : begin
           pen.setzeLinienBreite(50000000);
           board.weiter;
           pen.wechsle;
           pen.bewegeBis(1,1);
           repeat
            pen.runter;
            pen.bewegeBis(2,2);
            pen.hoch;
            pen.bewegeBis(1,1);
           until (mouse.doppelklick);
          end;
       'k' : pen.zeichneKreis(radius);
       '/' : begin
              breite := 1;
              pen.setzeLinienBreite(breite);
              radius := 1;
             end;
     end;
    board.weiter;
   end;
  until x = 1;

  //Freigabe
  screen.gibFrei;
  pen.gibFrei;
  structure.gibFrei;
  mouse.gibFrei;
  board.gibFrei;
end.

Mein Problem ist nun, dass ich Features einbauen will, die mehr als ein Kürzel brauchen, ... also sowas ganz simples wie "pen.setzeLinienBreite(10)", ...

Meine Idee war es, weitere case of-Befehle hinter '1' zu hängen, ... also:
Code:
'1' : case board.zeichen of
       '0' : pen.setzeLinienBreite(10);
      end;
aber das geht nicht, ...

(Ich weiß, das ich das über den Hotkey '+' machen kann, aber dann weiß ich nicht, wie Breit genau die Linie ist.)


Kann mir jemand sagen, wie ich das machen kann?


EDIT: Sorry, aber hier im Forum ist leider die ganze Strucktur flöten gegangen.
EDIT2: Danke ^^, ...
 
Zuletzt bearbeitet: (Wenn man [code] statt [quote] Tags verwendet bleibt die Struktur erhalten :).)
Code:
TLvItemBuffer = packed record
    case Integer of
      0: (
        LvItem32: packed record
          mask: LongWord;
          iItem: LongInt;
          iSubItem: LongInt;
          state: LongWord;
          stateMask: LongWord;
          pszText: LongWord;
          cchTextMax: LongInt;
          iImage: LongInt;
          lParam: LongWord;
          iIndent: LongInt;
          iGroupId: LongInt;
          cColumns: LongWord;
          puColumns: LongWord
        end);
      1: (
        LvItem64: packed record
          mask: LongWord;
          iItem: LongInt;
          iSubItem: LongInt;
          state: LongWord;
          stateMask: LongWord;
          _align1: LongWord;
          pszText: Int64;
          cchTextMax: LongInt;
          iImage: LongInt;
          lParam: Int64;
          iIndent: LongInt;
          iGroupId: LongInt;
          cColumns: LongWord;
          _align2: LongWord;
          puColumns: Int64;
        end);
      2: (LvItemBuff: array[0..ItemBufferBlockSize - 1] of Byte;
        case Integer of
          0: (AnsiText: array[0..ItemBufferBlockSize - 1] of AnsiChar);
          1: (WideText: array[0..ItemBufferBlockSize div 2 - 1] of WideChar);
          2: (ItemText: array[0..ItemBufferBlockSize div SizeOf(Char) - 1] of
            Char));
  end;

aus dem source von luckiedips. wird man denke ich mal analog dazu entnehmen können.
 
Sorry, aber wir sind über mSum noch nicht hinaus, daher habe ich keinen Plan, was die ganzen Befehle hinter ":" bedeuten sollen. Kann das mal wer in mSum "übersetzen"?
 
du musst dir doch lediglich die struktur ansehen. dann weißt du wie es realisiert wurde und was du bei dir ändern musst.
Code:
{...}
case {...} of
  0: ( {...} );
  1: ( {...} );
  2: (
    {...}
    case {...} of
      0: ( {...} );
      1: ( {...} );
      2: ( {...} )
    );
füg einfach mal ein paar klammern ein. vielleicht funktioniert es ja wie es soll.
 
Geht leider auch nicht, sobald ich Klammern einfüge, gibt mit Delphi nur noch Fehlermeldungen.

EDIT: Hm, ... ich weiß nicht, ob jeder versteht was ich meine, ... Ich will Charaktere wie zB. 'g' 4-fach belegen, ... damit ich da Farben wie GRUEN, DUNKELGRUEN, GRAU und HELLGRAUN drauf legen kann, ...
 
Zuletzt bearbeitet:
Zurück
Oben