+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 24
  1. #1
    Registriert seit
    07.03.2010
    Beiträge
    8

    Standard Wie kann man eine str umrechnen?

    Hi Leute,

    Ich mach Delphi erst seit ein paar Wochen und möchte um eure Hilfe bitten.
    Folgendes Problem:

    Ich möchte einen Rechner für den PC programmieren, wie es ihn ja schon bei Windows gibt.
    Der Unterschied ist, dass ich die komplette Rechnung in die Textbox schreiben möchte und diese später ausgerechnet werden soll.
    Code:
    
    var
      a: extended;
    begin
      a:=Edit1.Text;
      Edit2.Text=floattostr(a);
    end;
    
    wie man sich denken kann funktioniert das so nicht. Ich hoffe ihr könnt mir helfen.

    //Edit: delphi-Tags([delphi]...[/delphi]) ergänzt. Sie dienen der besseren Lesbarkeit. Bitte nächstes Mal selbst dran denken... mfg R2C2
    Geändert von R2C2 (08.03.2010 um 08:57 Uhr)

  2. #2
    Registriert seit
    14.04.2005
    Ort
    Dresden
    Beiträge
    165

    Standard

    Du willst ist einen Parser für Formeln schreiben. Um das Kind beim Namen zu nennen...
    Du musst die Zeichen in deinem Edit erstmal auslesen und dann nach einnander interpretieren. Du musst natürlich die mathematische Logik interpretieren.

    Fang erstmal mit +, -, *, / und ganzen Zahlen an. Suche in deinem String diese Zeichen. Du musst jedes Zeichen einzlen interpretieren. Für die Zahlen musst du logischerweise das 10ner System anwenden.

    23900

    0*1+
    0*10+
    9*100+
    3*1000+
    2*10000 = 23900

    ...

    Wenn du das erste Rechenzeichen findest musst du natürlich die entsprechende Regel anwenden. Besser ist aber du fängst erst einmal nur mit + und - an!
    Denn wenn du gleich * und / mit nimmst hast du ja schon den Anwendungsfall mit http://de.wikipedia.org/wiki/Operato...iativit%C3%A4t
    Geändert von mamelmuck (08.03.2010 um 00:20 Uhr)
    ~~~~~ °;-< ~~~~~

  3. #3
    Registriert seit
    18.03.2005
    Ort
    Rhoihesse
    Alter
    22
    Beiträge
    6.039

    Standard

    Zitat Zitat von mamelmuck Beitrag anzeigen
    Du willst ist einen Parser für Formeln schreiben. Um das Kind beim Namen zu nennen...
    Jo.

    Für die Zahlen musst du logischerweise das 10ner System anwenden.

    23900

    0*1+
    0*10+
    9*100+
    3*1000+
    2*10000 = 23900
    Ähm... du kennst StrToInt()?

    Wenn du das erste Rechenzeichen findest musst du natürlich die entsprechende Regel anwenden.
    Ne, noch nicht gleich. Erstmal in den Baum hängen, aufn Stack pushen oder wie auch immer der Parser funktioniert. Normalerweise wird man aber nicht sofort bei Auftreten eines Rechenzeichens rechnen (können). Das ist dann doch noch etwas komplizierter.

    Besser ist aber du fängst erst einmal nur mit + und - an!
    Besser aber du suchst dir erstmal ne einfachere Aufgabe. Nen Parser zu schreiben ist nix für Anfänger. Leg das erstmal beiseite. Deine Idee läuft dir nicht weg. Wenn du irgendwann mal besser programmieren kannst, kannst dus ja immer noch versuchen.

    Wenn du dich übernimmst, endet das nur in unnötigem Frust und du verdirbst dir den Spaß am Programmieren...

    mfg

    Christian

    Kaum macht man's richtig, schon klappts!

  4. #4
    Registriert seit
    14.04.2005
    Ort
    Dresden
    Beiträge
    165

    Standard

    Zitat Zitat von R2C2 Beitrag anzeigen
    Ähm... du kennst StrToInt()?
    Logisch, nur ich bin irgendwie gestern abend das zeichenweise durch gelaufen. Da komm ich dann auf sowas Ich hatte mal einen einfachen Parser, aber in C# geschrieben. Bis zur Wurzel und ins Quadrat konnte der rechnen.

    Jupp klar, das du beim ersten auftreten eines zeichens nicht schon rechnen kannst! Ich bin damals so vorgegangen das ich die innerste Klammer zuerst rekursiv gesucht und dann mich stückchenweise nach außen durch gearbeitet habe. Punktrechnung hab ich auch als imaginär geklammerten Ausdruck bedrachtet.
    ~~~~~ °;-< ~~~~~

  5. #5
    Registriert seit
    18.03.2005
    Ort
    Rhoihesse
    Alter
    22
    Beiträge
    6.039

    Standard

    Zitat Zitat von mamelmuck Beitrag anzeigen
    Jupp klar, das du beim ersten auftreten eines zeichens nicht schon rechnen kannst! Ich bin damals so vorgegangen das ich die innerste Klammer zuerst rekursiv gesucht und dann mich stückchenweise nach außen durch gearbeitet habe.
    Funktioniert, ist aber ungewöhnlich. Normalerweise benutzt man für sowas n Stack (oder zwei: einen für Operanden und einen für Operatoren) auf den man alles draufschaufelt oder man baut sich n Bäumchen auf. Das mit dem Stack funktioniert bei Postfix-Notation ziemlich gut. Hierfür haben wir auch ein Tutorial hier. Das geht aber auch bei Infox-Notation.

    Wenn du n Bäumchen baust, kannst du das hinterher einfach rekursiv abarbeiten. Dazu hab ich mal ne Demo in C++ geschrieben (n einfacher LL(1)-Parser und Auswertung über das Interpreter-Pattern). Guck hierzu mal in meinen Blog. Es gibt aber noch viele weitere Lösungen. Parser sind mittlerweile sehr gut erforscht.

    Noch ne andere Möglichkeit ist n Parser-Generator zu benutzen. Der nimmt die Syntax in EBNF entgegen und ggf. auch noch Codeteile für die Semantik und spuckt dir den Code für n fertigen Übersetzer aus. Aber auch das ist eher nix für Anfänger...

    mfg

    Christian

    Kaum macht man's richtig, schon klappts!

  6. #6
    Registriert seit
    06.06.2004
    Ort
    worms
    Alter
    55
    Beiträge
    3.123

    Standard

    Hier ein kleiner 2-stufiger Parser, der Infix in upn wandelt und dannberechnet. Der Parser kann bei jeder Änderung der Eingabe aufgerufen werden - real time sozusagen. Ein Ergebnis wird nur geliefert, wenn der Term aufgelöst werden kann.
    Es wird mathematisch korrekt gerechnet (zB Punkt vor Strich), klammern ist erlaubt. Unterstützt werden ^(Potenz), *, /, +, - und pi

    Das ganze wird real zum Ermitteln von Flächen genutzt und erlaubt daher die Benutzung von Bemassung, also zB "(3.2 m * 5 m)". Anstatt * kann auch 'x' oder 'X', anstatt "/" auch ":" genutzt werden.

    Benutzung:

    Code:
          try
             FormelParser := TFormelParser.Create;         
             try
       //         FormelParser.Clear;
                FormelParser.ParseString := StringGridDetails.Cells[ColHerleitung, ARow];
                d := FormelParser.Ergebnis;
                if d = 0 then // d: double
                   StringGridDetails.Cells[colFlaeche, ARow] := ''
                else
                   StringGridDetails.Cells[colFlaeche, ARow] := format('%f',[d]);
             except
             end;
          finally
             FormelParser.free;  
          end;      
    
    Der Parser folgt im nächsten Beitrag, da sonst zu lang"

    mfg ccklOud

  7. #7
    Registriert seit
    06.06.2004
    Ort
    worms
    Alter
    55
    Beiträge
    3.123

    Standard

    Code:
    unit FParser;
    // COPYRIGHT KLAUS KAISER
    interface
    uses SysUtils, Classes, Contnrs, Math;
    type TStackItem = record
    //   ValueAsString: String;
       Value: Double;
       Operator: String;
    end;
    type TRechnungsArt = (raNone, raStrichrechnung, raPunktrechnung, raPotenzierung);
    type
      TFormelStack = class(TObject)
      private
        { Private-Deklarationen }
        Stack: array[0..100] of TStackItem;
        fStackTop: Integer;
        function GetResult: Double;
        function GetStackEmpty: boolean;
      public
        { Public-Deklarationen }
    //    property ParseString: string read fParseString write SetParseString;
        constructor Create;
        procedure Add(const StackItem: TStackItem);
        procedure Push(const StackItem: TStackItem);
        procedure Clear;
        function pop: TStackItem;
        function ItemAtTop: TStackItem;
        property StackTop: Integer read fStackTop;
        property Result: Double read GetResult;
        property StackEmpty: boolean read GetStackEmpty;
    end;
    type
    //  TFormelParser = class(TComponent)
      TFormelParser = class(TObject)
      private
        { Private-Deklarationen }
        fParseString, lcParmstring: string;
        Token, Token_1, Token_2, Token_3, PrevToken: string; 
        
    //    TermList: TStringList;
        FormelStack: TFormelStack;
    //    AktParseStringPos: Integer;
        AktRechnungsArt: TRechnungsArt;
        
        procedure SetParseString(const Value: string);
        procedure Fehler;
        function IsTokenDelimiter(c: Char): Boolean;    function IsOperator(const s: string): Boolean;
        function GetErgebnis: Double;
        procedure ReleaseTermList(list: TStringlist);
        procedure GetNextToken(var Value: string);
        function GetToken(var Value: string): string;
        procedure GetFirstToken(var Value: string);
        function GetRechnungsart(const s: string): TRechnungsart;
        function IsNumber(s: string): Boolean;
        procedure Term(TermList: TStringlist);
        function IsLesserOperator(const Op1, Op2: string): Boolean;
        function istVorzeichen(const s: string): boolean;
      public
        { Public-Deklarationen }
        TermList: TStringList;
        constructor Create;
        destructor Destroy; override;
        procedure Clear;
        property ParseString: string read fParseString write SetParseString;
        property Ergebnis: Double read GetErgebnis;
      end;
    implementation
    { TFormelParser }
    //constructor TFormelParser.Create(AOwner: TComponent);
    constructor TFormelParser.Create;
    begin
    //   inherited create(AOwner);
       inherited create;
       FormelStack := TFormelStack.Create;
       TermList := TStringList.Create;
       PrevToken := '';
       Token := '';
       Token_1 := '';
       Token_2 := '';
       Token_3 := '';
    end;
    destructor TFormelParser.Destroy;
    begin
      FormelStack.Free;
      ReleaseTermList(TermList);
      inherited Destroy;
    end;
    procedure TFormelParser.ReleaseTermList(list: TStringlist);
    var i: integer;
    begin
       for i := 0 to TermList.count - 1 do begin
          if TermList.Objects[i] <> nil then
             ReleaseTermList(TermList.Objects[i] as TStringList);
       end;
       list.Free;
    end;
    function TFormelParser.GetToken(var Value: string): string;
    var i: Integer;
    begin
       Result := '';
       if Value = '' then
          Exit;
       if IsTokenDelimiter(Value[1]) then begin
             result := Value[1];
             if Value[1] = #13 then
                Value := Trim(Copy(Value, 2, Length(Value)))
             else
                Value := Trim(Copy(Value, 2, Length(Value)));
             Exit;
          end
       else begin
          for i := 1 to Length(Value) do begin
             if IsTokenDelimiter(Value[i]) then begin
                result := trim(Copy(Value, 1, i - 1));
                if Result = 'pi' then
                   Result := FloatToStr(Pi);
                If IsNumber(Result) then 
                   Result := StringReplace(Result, '.', ',', [rfReplaceAll]);
                   
                if Value[i] = #13 then
                   Value := Trim(Copy(Value, i + 1, Length(Value)))
                else
                   Value := Trim(Copy(Value, i, Length(Value)));
                Exit;
             end;
          end; 
          result := trim(Value);
          if Result = 'pi' then
             Result := FloatToStr(Pi);
          Value := '';
       end;
    end;
    procedure TFormelParser.GetNextToken(var Value: string);
    begin
       PrevToken := Token;
       Token := Token_1;
       Token_1 := Token_2;
       Token_2 := Token_3;
       Token_3 := GetToken(Value);
    end;
    procedure TFormelParser.GetFirstToken(var Value: string);
    begin
       PrevToken := '';
       Token := GetToken(Value);
       Token_1 := GetToken(Value);
       Token_2 := GetToken(Value);
       Token_3 := GetToken(Value);
    end;
    function TFormelParser.IsNumber(s: string): Boolean;
    begin
       result := false;
       if s = '' then
          Exit;
       if s[1] in ['0'..'9'] then
          result := True;
       
    end;
    function TFormelParser.GetRechnungsart(const s: string): TRechnungsart;
    begin
       if (s = '+')
       or (s = '-') then 
          Result := raStrichrechnung 
       else
       if (s = '*')
       or (s = '/')
       or (s = ':')
       or (s = 'x') then 
          Result := raPunktrechnung 
       else
       if (s = '(') then
          Result := raPunktrechnung
       else
          Result := raNone;
       
    end;
    procedure TFormelParser.Term(TermList: TStringlist);
    var AktTerm: string; List: TStringList; NextIsOperator: Boolean; AktRechnungsArt, NextRechnungsart: TRechnungsArt;
    begin
       AktTerm := '';
       
       if not IsNumber(Token) then  
          if Token[1] in ['+', '-'] then begin
             AktTerm := '0' + Token;
             GetNextToken(lcParmstring);
             end
          else begin
             Fehler;
             Exit;
          end;
       
       AktTerm := AktTerm + Token;
       NextIsOperator := True;
       
       GetNextToken(lcParmstring);
       while Token <> '' do begin
          if Token = '(' then begin
    //         List := TStringList.create;
    //         TermList.AddObject(AktTerm, List);    
             TermList.Add(AktTerm); 
             Term(TermList);   
             end
          else if Token = ')' then begin
             exit;
             end
          else if IsOperator(Token) then begin
             if not NextIsOperator then begin
                Fehler;
                Exit;
             end;
             NextIsOperator := False;
             AktTerm := AktTerm + Token;
    //         if AktRechnungsArt = raNone then
                AktRechnungsArt := GetRechnungsart(Token);
             end
          else if IsNumber(Token) then begin
             if NextIsOperator then begin
                Fehler;
                Exit;
             end;
             if Token_1 = '' then 
                NextRechnungsart := AktRechnungsArt
             else
                NextRechnungsart := GetRechnungsart(Token_1); 
             if NextRechnungsart = AktRechnungsArt then
                AktTerm := AktTerm + Token
             else begin
                if AktRechnungsArt = raPunktrechnung then begin
                   AktTerm := AktTerm + Token + Token_1;
                   GetNextToken(lcParmstring);
                end;
                TermList.Add(AktTerm);    
                if AktRechnungsArt = raPunktrechnung then 
                   AktTerm := ''
                else
                   AktTerm := Token;
                AktRechnungsArt := NextRechnungsart;
             end;
             NextIsOperator := true;
    //         AktTerm := AktTerm + Token;
          end;
          GetNextToken(lcParmstring);
       end;
       if AktTerm <> '' then
          TermList.Add(AktTerm);    
       
    end;
    function TFormelParser.istVorzeichen(const s: string): boolean;
    begin
       result := False;
       if (s = '-') or (s = '+') then 
          if (PrevToken = '') or (PrevToken = '(') or IsOperator(PrevToken) then
             if IsNumber(Token_1) then
                Result := True;
    end;
    function TFormelParser.IsLesserOperator(const Op1, Op2: string): boolean;
    VAR RechnungsArtOP1, RechnungsArtOP2: TRechnungsArt; //(raNone, raStrichrechnung, raPunktrechnung raPotenzierung);
    begin
       RechnungsArtOP1 :=  GetRechnungsart(Op1);          
       RechnungsArtOP2 :=  GetRechnungsart(Op2); 
       if  RechnungsArtOP1 < RechnungsArtOP2 then
          Result :=  True
       else
          Result := False;
    end;
    procedure TFormelParser.SetParseString(const Value: string);
    var ParseValueString, AktTerm: string; Operator: char; ParseValue: Double;
        StackItem, WrkStackItem: TStackItem; AktRechnungsArt, NextRechnungsArt, HlpRechnungsArt: TRechnungsArt; NewTerm: Boolean;
        Vorzeichen: string;
    begin
       AktRechnungsArt := raNone;                                   
       NextRechnungsArt := raStrichrechnung;              
       NewTerm := False;
       fParseString := Value;
       lcParmstring := trim(AnsiLowerCase(fParseString));
       lcParmstring := StringReplace(lcParmstring, #10, '', [rfReplaceAll]);
       if fParseString = '' then
          Exit;
       Vorzeichen := '';
       GetFirstToken(lcParmstring);
       while Token <> '' do begin
          if IsNumber(Token)then begin
             TermList.Add(Token);
             if Vorzeichen <> '' then begin
                TermList.Add(Vorzeichen);
                Vorzeichen := '';
             end;   
             end
          else if IsOperator(Token)then  begin
             if istVorzeichen(Token) then begin
                TermList.Add('0');
                Vorzeichen := Token; 
                end
             else begin
                StackItem.Operator := Token;
                if FormelStack.StackEmpty then begin
                      FormelStack.Push(StackItem);
                   end
                else begin
                   if FormelStack.ItemAtTop.Operator = '(' then  begin
                      FormelStack.Push(StackItem);
                      end
                   else begin
                      WrkStackItem := FormelStack.pop;  
                      if istVorzeichen(Token) then begin
                         TermList.Add('0'); 
                         Vorzeichen := Token;
                         end
                      else begin
                         if IsLesserOperator(StackItem.Operator, WrkStackItem.Operator) then begin
                            TermList.Add(WrkStackItem.Operator); 
                            while not FormelStack.StackEmpty  
                            and IsLesserOperator(StackItem.Operator, FormelStack.ItemAtTop.Operator) do begin                   
                               WrkStackItem := FormelStack.Pop;
                               TermList.Add(WrkStackItem.Operator); 
                            end;
                            FormelStack.Push(StackItem);
                            end
                         else begin
                            FormelStack.Push(WrkStackItem);
                            FormelStack.Push(StackItem);
                         end;
                      end;
                   end;  
                end;
             end;
             end
          else if Token = '(' then begin
             StackItem.Operator := Token;
             FormelStack.Push(StackItem);
             end
          else if Token = ')' then begin
             WrkStackItem := FormelStack.pop;
             while not FormelStack.StackEmpty do begin
                if WrkStackItem.Operator = '(' then
                   Break;            
                TermList.Add(WrkStackItem.Operator);                    
                WrkStackItem := FormelStack.pop;
             end 
             end
          else if Token = 'm' then begin
          end;
          GetNextToken(lcParmstring);
    //      Term(TermList);
       end;
       while not FormelStack.StackEmpty do begin
          WrkStackItem := FormelStack.pop;
    //      if WrkStackItem.Operator := '(' then
    //         Break;            
         TermList.Add(WrkStackItem.Operator);                    
       end;
    end;
    function TFormelParser.IsOperator(const s: string): Boolean;
    var c: Char;
    begin
       if (s = '+')
       or (s = '-')
       or (s = '*')
       or (s = 'x')
       or (s =  '/')
       or (s =  ':')
       or (s =  '^') then
          Result := True
       else
          Result := False;
    end;
    function TFormelParser.IsTokenDelimiter(c: Char): Boolean;
    begin
       if c in [' ', '(', ')', #10, #13, 'm'] then
          Result := True
       else
          Result := IsOperator(c);
    end;
    
    procedure TFormelParser.Fehler;
    begin
    end;
    function TFormelParser.GetErgebnis: Double;
    var i: Integer;
        StackItem: TStackItem;
     begin
       FormelStack.Clear;
       for i := 0 to TermList.Count - 1 do begin
          StackItem.Value := 0;
          StackItem.Operator := '';
          if IsNumber(TermList[i]) then
             StackItem.Value := StrToFloat(TermList[i])
          else
             StackItem.Operator := TermList[i];
          FormelStack.Add(StackItem);
       end;
       Result := FormelStack.Pop.Value;
    end;
    procedure TFormelParser.Clear;
    begin
        FormelStack.Clear;
        TermList.Clear;
    end;
    { TFormelStack }
    procedure TFormelStack.Add(const StackItem: TStackItem);
    var WrkStackItem: TStackItem;
    begin
       if StackItem.Operator = '' then begin
          Push(StackItem);
          end
       else begin
          WrkStackItem := pop;
          if fStackTop < 0 then begin
             WrkStackItem.Operator := '';
             WrkStackItem.Value := 0;
             Push(WrkStackItem);
             exit;
          end;
          if StackItem.Operator = '+' then
             Stack[fStackTop].Value := Stack[fStackTop].Value + WrkStackItem.Value
          else if StackItem.Operator = '-' then
             Stack[fStackTop].Value := Stack[fStackTop].Value - WrkStackItem.Value 
          else if StackItem.Operator = '*'then
             Stack[fStackTop].Value := Stack[fStackTop].Value * WrkStackItem.Value 
          else if StackItem.Operator = '/' then
              Stack[fStackTop].Value := Stack[fStackTop].Value / WrkStackItem.Value 
          else if StackItem.Operator = '^' then 
             Stack[fStackTop].Value := Power(Stack[fStackTop].Value, WrkStackItem.Value);
       end;
    end;
    procedure TFormelStack.Clear;
    begin
       fStackTop := -1;
    end;
    constructor TFormelStack.Create;
    begin
       fStackTop := -1;
    end;
    function TFormelStack.GetResult: Double;
    begin
       if fStackTop > 0 then
          Result := 0
       else
          Result := Stack[fStackTop].Value;
    end;
    function TFormelStack.GetStackEmpty: boolean;
    begin
       if fStackTop < 0 then
          Result := True
       else 
          Result := False;
    end;
    function TFormelStack.ItemAtTop: TStackItem;
    begin
       Result := Stack[fStackTop];
    end;
    function TFormelStack.pop: TStackItem;
    begin
       if fStackTop < 0 then begin
          Result.Value := 0;
          Result.Operator := '';
          Exit;
       end;
       Result := Stack[fStackTop];
       Dec(fStackTop);
    end;
    procedure TFormelStack.Push(const StackItem: TStackItem);
    begin
        inc(fStackTop);
        Stack[fStackTop] := StackItem;
        if Stack[fStackTop].Operator = 'x' then
           Stack[fStackTop].Operator := '*'
        else if Stack[fStackTop].Operator = ':' then
           Stack[fStackTop].Operator := '/';
    end;
    end.
     

  8. #8
    Registriert seit
    09.08.2007
    Ort
    Eifel (B) (die dunkle Seite der Macht)
    Alter
    31
    Beiträge
    342

    Standard

    Schöne Sache... na dann will ich mal hoffen, dass der TE da auch durchblickt...
    Falang

    An Weisheiten mangelt es nicht sondern an Menschen die sie auch anwenden (Epiktetos)

    Zensur verbietet dem Mann ein Steak weil das Baby es nicht kauen kann. (Mark Twain)

  9. #9
    Registriert seit
    07.03.2010
    Beiträge
    8

    Standard

    Danke für die schnellen Antworten

    Aber gibt es nicht vielleicht eine schnellere Lösung?

    Angenommen die Rechnung die man in die Textbox schreibt ist 5*5. Dann ist diese Rechnung als String gespeichert.

    Aber wenn man einer Variable (z.B. extended) 5*5 zuweist, wird es ohne Probleme gerechnet.
    Code:
    
    var
      a: string;
      b: extended;
    begin
      a:='5*5';
      b:=5*5;
    end;
    
    so funktioniert es...
    Code:
    
    var
      a: string;
      b: extended;
    begin
      a:='5*5';
      b:=a;
    end;
    
    so geht es nicht. Es muss doch eine Lösung geben. Theoretisch müsste es ja eigentlich funktionieren.

    //Edit: delphi-Tags([delphi]...[/delphi]) ergänzt. Sie dienen der besseren Lesbarkeit. Bitte nächstes Mal selbst dran denken... mfg R2C2
    Geändert von R2C2 (08.03.2010 um 15:42 Uhr)

  10. #10
    Registriert seit
    18.03.2005
    Ort
    Rhoihesse
    Alter
    22
    Beiträge
    6.039

    Standard

    Zitat Zitat von flensi Beitrag anzeigen
    Aber gibt es nicht vielleicht eine schnellere Lösung?
    Wenn es die gäbe, hätten wir sie dir gesagt. Fakt ist, dass es *nur* über einen Parser geht. Du kannst höchstens einen bestehenden Parser nehmen und verwenden, aber ohne Parser gehts nunmal nicht.

    mfg

    Christian

    Kaum macht man's richtig, schon klappts!

Ähnliche Themen

  1. Wie kann ich eine *.swf Datei abspielen?
    Von Armin Kibbs im Forum Multimedia/Spiele/Grafik
    Antworten: 5
    Letzter Beitrag: 15.02.2008, 18:31
  2. Wie kann ich eine Datenbank durchsuchen
    Von Kampfschwimmmer im Forum Bastelecke
    Antworten: 1
    Letzter Beitrag: 10.07.2007, 14:51
  3. Wo kann ich eine einfache CRT.Pas runterladen?
    Von FloSch85 im Forum Sonstiges
    Antworten: 1
    Letzter Beitrag: 02.03.2006, 20:07
  4. Wie kann man auf eine frühere Instanz zugreifen?
    Von garfield94 im Forum Komponenten
    Antworten: 2
    Letzter Beitrag: 04.07.2005, 19:42
  5. Wie kann eine Subform eine MainForm ansteuern?
    Von matthias9999 im Forum Bastelecke
    Antworten: 3
    Letzter Beitrag: 07.05.2005, 18:45

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein