Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Frosch hüpfen (https://www.delphipraxis.net/168282-frosch-huepfen.html)

borstenei 12. Mai 2012 22:03

Delphi-Version: 2010

Frosch hüpfen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nicht gleich lachen!
Mir ist gestern eine Exceldatei untergekommen...Frosch_hüpfen...ohne viel Worte...
Ich habe versucht das ganze mal per Delphi zu gestalten...es funktioniert.
Aber hier stellt sich mir wieder mal die Frage ist das so effektiv was ich da mache...sicher der fertigen exe sieht man(n) das Ergebniss nicht an
aber hat das Hand und Fuss ?
Ich verbrauche hier unzählige Zeilen für die Auswertung...das sollte doch bestimmt auch anders gehen?
Delphi-Quellcode:
unit frosch1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Zuege: TLabel;
    Zeit: TLabel;
    Timer1: TTimer;
    Neu: TButton;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Shape4: TShape;
    Shape5: TShape;
    Shape6: TShape;
    Shape7: TShape;
    Bravo: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Shape3MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Shape5MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Shape2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Shape6MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Shape7MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure NeuClick(Sender: TObject);
    procedure Shape4MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    procedure auswerten;
    procedure neuzeichnen;
    { Public-Deklarationen }
  end;

type
  FarbenBasis = Array[0..6]of TColor;

var
  Form1: TForm1;
  FarbenWork : FarbenBasis;
  clicken,laufzeit : Integer;
const
Farben : FarbenBasis =(clGreen,clGreen,clGreen,clBtnFace,clRed,clRed,clRed);
EndZuStand : Array[0..6]of TColor =(clRed,clRed,clRed,clBtnFace,clGreen,clGreen,clGreen);


implementation

{$R *.dfm}

function SekToStr(sec: integer) : string ;
 var
 sek,min,h : Integer;
 begin
   sek := sec mod 60;
   min := (sec div 60) mod 60;
   h := sec div 3600;
   result := IntToStr(h)+'h '+IntToStr(min)+'min '+IntToStr(sek)+ 'sek ';
 end;

procedure TForm1.FormCreate(Sender: TObject);
begin
clicken := 0;
FarbenWork := Farben;
neuzeichnen;
end;

procedure TForm1.NeuClick(Sender: TObject);
begin
Timer1.Enabled := False;
laufzeit:= 0;
Zuege.Caption :='Anzahl der Züge : ';
Zeit.Caption :='Benötigte Zeit : ';
clicken := 0;
Bravo.Visible := False;
FarbenWork := Farben;
neuzeichnen

end;

procedure TForm1.auswerten;    //vergleichen
var
x,i:Integer;
begin

i:= 0;
for x := 0 to 6 do
if FarbenWork[x] = EndZuStand[x] then  //ist und soll vergleichen
inc(i);
if i = 7  then
begin
Bravo.Visible := True;
Timer1.Enabled := False;
end;
end;

procedure TForm1.neuzeichnen;
var
x:Integer;
begin
for x := 0 to 6 do
(FindComponent('Shape' + IntToStr(x+1))as TShape).Brush.Color := FarbenWork[x];

for x := 0 to 6 do
if(FindComponent('Shape' + IntToStr(x+1))as TShape).Brush.Color = clred then
 (FindComponent('Label' + IntToStr(x+1))as TLabel).Caption:= 't';
for x := 0 to 6 do
if(FindComponent('Shape' + IntToStr(x+1))as TShape).Brush.Color = clGreen then
 (FindComponent('Label' + IntToStr(x+1))as TLabel).Caption:= 'u';
for x := 0 to 6 do
if(FindComponent('Shape' + IntToStr(x+1))as TShape).Brush.Color = clBtnFace then
 (FindComponent('Label' + IntToStr(x+1))as TLabel).Caption:= '';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(laufzeit);
Zuege.Caption :='Anzahl der Züge : ' + IntToStr(clicken);
Zeit.Caption :='Benötigte Zeit : '+sekToStr(laufzeit);
end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (FarbenWork[0] = clGreen)and (FarbenWork[1] = clBtnFace) then //nach rechts 1+
    begin
    FarbenWork[0]:= clBtnFace;
    FarbenWork[1]:= clGreen;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[0] = clGreen)and (FarbenWork[1] <> clBtnFace) and (FarbenWork[2] = clBtnFace) then //nach rechts 2+
    begin
    FarbenWork[2]:= clGreen;
    FarbenWork[0]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

neuzeichnen;
auswerten;
end;

procedure TForm1.Shape2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (FarbenWork[1] = clGreen)and (FarbenWork[2] = clBtnFace) then //nach rechts 1+
    begin
    FarbenWork[1]:= clBtnFace;
    FarbenWork[2]:= clGreen;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[1] = clGreen)and (FarbenWork[2] <> clBtnFace) and (FarbenWork[3] = clBtnFace) then //nach rechts 2+
    begin
    FarbenWork[3]:= clGreen;
    FarbenWork[1]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[1] = clRed)and (FarbenWork[0] = clBtnFace) then //nach links 1-
    begin
    FarbenWork[1]:= clBtnFace;
    FarbenWork[0]:= clRed;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

neuzeichnen;
auswerten;

end;

procedure TForm1.Shape3MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (FarbenWork[2] = clGreen)and (FarbenWork[3] = clBtnFace) then //nach rechts 1+
    begin
    FarbenWork[2]:= clBtnFace;
    FarbenWork[3]:= clGreen;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[2] = clGreen)and (FarbenWork[3] <> clBtnFace) and (FarbenWork[4] = clBtnFace) then //nach rechts 2+
    begin
    FarbenWork[4]:= clGreen;
    FarbenWork[2]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[2] = clRed)and (FarbenWork[1] = clBtnFace) then //nach links 1-
    begin
    FarbenWork[2]:= clBtnFace;
    FarbenWork[1]:= clRed;
    inc(clicken);
    end;
if (FarbenWork[2] = clRed)and (FarbenWork[1] <> clBtnFace) and (FarbenWork[0] = clBtnFace) then //nach links 2+
    begin
    FarbenWork[0]:= clRed;
    FarbenWork[2]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

neuzeichnen;
auswerten;
end;

procedure TForm1.Shape4MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (FarbenWork[3] = clGreen)and (FarbenWork[4] = clBtnFace) then //nach rechts 1+
    begin
    FarbenWork[3]:= clBtnFace;
    FarbenWork[4]:= clGreen;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[3] = clGreen)and (FarbenWork[4] <> clBtnFace) and (FarbenWork[5] = clBtnFace) then //nach rechts 2+
    begin
    FarbenWork[5]:= clGreen;
    FarbenWork[3]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[3] = clRed)and (FarbenWork[2] = clBtnFace) then //nach links 1-
    begin
    FarbenWork[3]:= clBtnFace;
    FarbenWork[2]:= clRed;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

if (FarbenWork[3] = clRed)and (FarbenWork[2] <> clBtnFace) and (FarbenWork[1] = clBtnFace) then //nach links 2+
    begin
    FarbenWork[1]:= clRed;
    FarbenWork[3]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

neuzeichnen;
auswerten;
end;

procedure TForm1.Shape5MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if (FarbenWork[4] = clRed)and (FarbenWork[3] = clBtnFace) then //nach links 1-
    begin
    FarbenWork[4]:= clBtnFace;
    FarbenWork[3]:= clRed;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[4] = clRed)and (FarbenWork[3] <> clBtnFace) and (FarbenWork[2] = clBtnFace) then //nach links 2-
    begin
    FarbenWork[2]:= clRed;
    FarbenWork[4]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[4] = clGreen)and (FarbenWork[5] = clBtnFace) then //nach rechts 1+
    begin
    FarbenWork[4]:= clBtnFace;
    FarbenWork[5]:= clGreen;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

if (FarbenWork[4] = clGreen)and (FarbenWork[5] <> clBtnFace) and (FarbenWork[6] = clBtnFace) then //nach rechts 2-
    begin
    FarbenWork[6]:= clGreen;
    FarbenWork[4]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

neuzeichnen;
auswerten;
end;

procedure TForm1.Shape6MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if (FarbenWork[5] = clRed)and (FarbenWork[4] = clBtnFace) then //nach links 1-
    begin
    FarbenWork[5]:= clBtnFace;
    FarbenWork[4]:= clRed;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[5] = clRed)and (FarbenWork[4] <> clBtnFace) and (FarbenWork[3] = clBtnFace) then //nach links 2-
    begin
    FarbenWork[3]:= clRed;
    FarbenWork[5]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
 if (FarbenWork[5] = clGreen)and (FarbenWork[6] = clBtnFace) then //nach rechts 1+
    begin
    FarbenWork[5]:= clBtnFace;
    FarbenWork[6]:= clGreen;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

neuzeichnen;
auswerten;
end;

procedure TForm1.Shape7MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if (FarbenWork[6] = clRed)and (FarbenWork[5] = clBtnFace) then //nach links 1-
    begin
    FarbenWork[6]:= clBtnFace;
    FarbenWork[5]:= clRed;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;
if (FarbenWork[6] = clRed)and (FarbenWork[5] <> clBtnFace) and (FarbenWork[4] = clBtnFace) then //nach links 2-
    begin
    FarbenWork[4]:= clRed;
    FarbenWork[6]:= clBtnFace;
    if Timer1.Enabled = False then
    Timer1.Enabled := True;
    inc(clicken);
    end;

neuzeichnen;
auswerten;
end;



end.

Bummi 12. Mai 2012 22:57

AW: Frosch hüpfen
 
Ein Optimierungsvorschlag ..

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TPosState = (psgreenDirR, psRedDirL, psEmpty);
  TPosArray = Array [0 .. 6] of TPosState;

  TForm2 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    FPosArray: TPosArray;
    FZuege, FStart: Cardinal;
    procedure InitArray;
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

Procedure TForm2.InitArray;
var
  i: Integer;
begin
  Timer1.Enabled := False;
  Caption := '';
  FZuege := 0;
  FStart := 0;
  FPosArray[3] := psEmpty;
  for i := 0 to 2 do
  begin
    FPosArray[i] := psgreenDirR;
    FPosArray[4 + i] := psRedDirL;
  end;
  PaintBox1.Invalidate;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  InitArray;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  InitArray;
end;

procedure TForm2.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  idx: Integer;
  cnt: Integer;
begin
  idx := X div (PaintBox1.Width div 7);
  Timer1.Enabled := true;
  inc(FZuege);
  if FPosArray[idx] = psgreenDirR then
  begin
    if (idx < 6) and (FPosArray[idx + 1] = psEmpty) then
    begin
      FPosArray[idx + 1] := psgreenDirR;
      FPosArray[idx] := psEmpty;
      PaintBox1.Invalidate;
    end
    else if (idx < 5) and (FPosArray[idx + 2] = psEmpty) then
    begin
      FPosArray[idx + 2] := psgreenDirR;
      FPosArray[idx] := psEmpty;
      PaintBox1.Invalidate;
    end
  end
  else if FPosArray[idx] = psRedDirL then
  begin
    if (idx > 0) and (FPosArray[idx - 1] = psEmpty) then
    begin
      FPosArray[idx - 1] := psRedDirL;
      FPosArray[idx] := psEmpty;
      PaintBox1.Invalidate;
    end
    else if (idx > 1) and (FPosArray[idx - 2] = psEmpty) then
    begin
      FPosArray[idx - 2] := psRedDirL;
      FPosArray[idx] := psEmpty;
      PaintBox1.Invalidate;
    end
  end
end;

procedure TForm2.PaintBox1Paint(Sender: TObject);
var
  i: Integer;
  c: TCanvas;
  sgn: String;
  col: TColor;
  wd: Integer;
begin
  wd := PaintBox1.Width div 7;
  c := PaintBox1.Canvas;
  for i := 0 to 6 do
  begin
    case FPosArray[i] of
      psgreenDirR:
        begin
          col := clLime;
          sgn := '>';
        end;
      psRedDirL:
        begin
          col := clRed;
          sgn := '<';
        end;
    else
      begin
        col := Color;
        sgn := '';

      end;
    end;
    c.Brush.Style := bsSolid;
    c.Brush.Color := col;
    c.Rectangle(i * wd, 0, (i + 1) * wd, PaintBox1.Height);
    c.Brush.Style := bsClear;
    c.TextOut(i * wd, 0, sgn);
  end;
end;

Function Finished(Arr: TPosArray): Boolean;
begin
  Result := (Arr[0] = psRedDirL) and (Arr[1] = psRedDirL) and
    (Arr[2] = psRedDirL) and (Arr[4] = psgreenDirR) and (Arr[5] = psgreenDirR)
    and (Arr[6] = psgreenDirR);
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
  if FStart = 0 then
    FStart := GetTickCount;
  if Finished(FPosArray) then
  begin
    Caption := Caption + ' FERTIG';
    Timer1.Enabled := False;
  end
  else
    Caption := Format('%d Züge in %d Sekunden',
      [FZuege, Round((GetTickCount - FStart) / 1000)]);
end;
end.

borstenei 13. Mai 2012 22:41

AW: Frosch hüpfen
 
Danke Dir,
das sieht richtig gut aus!
Sauber strukturiert, übersichtlich ..das unterscheidet sich ja schon mal deutlich von meinem Kram.
Wobei ich gern mal die Diskussion anstoßen würde...ob nicht das Ergebnis entscheidend ist?
Ich selber schreibe Programme seit Anfang der 80 Jahre, damals noch auf dem C64..später Amiga und Anfang der 90er dann der PC .Da habe ich dann mit GFA Basic angefangen…für die damaligen Verhältnisse ein geniales Programm..(man konnte zb. Proceduren zusammenklappen was Delphi erst fast 20 Jahre später gelernt hat).Dann kam 1995 Delphi…das war es!
Seitdem bin ich Delphi treu geblieben, das programmieren ist bei nur Hobby !
Aber bei dem was ich mache merkt man eben auch immer wieder das ich nicht Informatik studiert habe, alles irgendwie auf das Ziel programmiert aber grundsätzliche Dinge nicht beachtet.
Einfach jetzt mal eine Frage…muss der Code genial sein? dafür aber die Oberfläche altbacken,unbedienbar..
Viele User hier haben auch einen Link zu ihrer HP eingestellt….es sind Leute dabei die immer wieder durch super,geniale Postings auffallen….schaut man dann auf die Software die sie versuchen zu verkaufen kann man nur die Hände über den Kopf zusammenschlagen..(Optik ala windows 3.11).
Daher hier die Frage ist meiner Software nicht egal ob sie besten OOP Regeln entspricht?

Bummi 13. Mai 2012 23:20

AW: Frosch hüpfen
 
Zitat:

Aber hier stellt sich mir wieder mal die Frage ist das so effektiv was ich da mache...sicher der fertigen exe sieht man(n) das Ergebniss nicht an
aber hat das Hand und Fuss ?
Ich verbrauche hier unzählige Zeilen für die Auswertung...das sollte doch bestimmt auch anders gehen?
Ich hatte das so verstanden als ob Du Anregungen suchst ...

relocate 14. Mai 2012 07:13

AW: Frosch hüpfen
 
Zitat:

Zitat von borstenei (Beitrag 1166368)
[...]
Seitdem bin ich Delphi treu geblieben, das programmieren ist bei nur Hobby !
Aber bei dem was ich mache merkt man eben auch immer wieder das ich nicht Informatik studiert habe, alles irgendwie auf das Ziel programmiert aber grundsätzliche Dinge nicht beachtet.
Einfach jetzt mal eine Frage…muss der Code genial sein? dafür aber die Oberfläche altbacken,unbedienbar..
Viele User hier haben auch einen Link zu ihrer HP eingestellt….es sind Leute dabei die immer wieder durch super,geniale Postings auffallen….schaut man dann auf die Software die sie versuchen zu verkaufen kann man nur die Hände über den Kopf zusammenschlagen..(Optik ala windows 3.11).
Daher hier die Frage ist meiner Software nicht egal ob sie besten OOP Regeln entspricht?

Hallo,

ich bin Informatiker aus dem Bereich Administration, die Programmierung betreibe ich nur
um mir mein Leben als Admin zu erleichtern, weil ich mir dafür so manches Tool selbst schreibe.
Nebenbei habe ich auch Privat einige Aufgaben die Programme für mich lösen.
Man könnte bei mir also sagen, die Programmierung hat den Stellenwert eines Hobbies.

Die Programme funktionieren, sehen aber nicht unbedingt super aus.
Das ist mir allerdings nicht egal, denn nachdem sie funktionieren versuche ich den Code zu optimieren.
Das hat mehrere Gründe.

Optimierter Code ist meist besser verständlich, vor allem wichtig,
wenn das Programm später nochmal bearbeitet wird,
oder als Vorlage für andere Software dienen soll.
Wenn es also Vorlage für andere Software dienen soll, ist OOP sehr hilfreich.
Denn eine Idee hinter OOP ist die problemlose Wiederverwendbarkeit von Code.
Sauberer Code erzeugt auch bessere Programme.
Mein letztes Tool war alles andere als Effektiv.
Nach der Optimierung war es auf meinem Rechner um den Faktor 6 schneller.
Auf einem älteren PC sogar um den Faktor 20.

Folglich, es mag toll sein wenn deine Programme eine Optik wie für einen Mac bieten,
aber grottig langsam sind, oder wenn die Kunden deiner Software Erweiterungen wünschen
und Du dir dabei einen abbrichst, weil dein Code so ein Müll ist.

Folglich, beides ist zu beachten. Viele Programmierer sind aber keine Anwender und
da leidet dann manchmal die Useabilty, das haben viele noch nicht auf dem Schirm.
Zumal wichtiger ist, dass die Software erstmal das macht was sie soll.
Form follows Function.

Gruß relocate

himitsu 14. Mai 2012 08:57

AW: Frosch hüpfen
 
Lieber Win 3.1, was sich aber sehr schnell über ein Manifest aufpeppen ließe, als der gescheiterte Versuch eine coolen Oberfläche hinzubekommen.
http://kryptochef.net/indexh2e.htm

Ich hab schon viele Programme gesehn, welche funkional überhaupt nichts hinbekommen haben, aber dafür supercool aussahn.
Mindestens 95% der Dateigröße gingen dann nur für die Skinengine und tausende mitgelieferte Skins drauf, dazu dann eventuell noch ein paar hundert MB an WAVEs,
aber der Code selber macht fast garnichts und das noch nichtmal richtig.

Medium 14. Mai 2012 09:11

AW: Frosch hüpfen
 
Das ist der Hauptgrund, weshalb besonders in größeren Betrieben die UIs nicht von Informatikern, sondern Designern, Grafikern und teils sogar ganz speziellen darauf ausgerichteten UI Spezialisten erstellt wird (die teilweise nicht eine Zeile Code schreiben könnten).

Auch muss man stark bei der Zielgruppe und -setzung unterscheiden: Schreibe ich ein Tool, welches vorwiegend in Kreisen technisch gut ausgebildeter zum Einsatz kommt, so komme ich beim UI meist "einfacher" davon. Oftmals werden von "Kleinprogrammierern" auch Projekte, die als kleines Töölchen für einen selbst waren etwas aufgemöbelt und dann der Community bereit gestellt. Dass die Form aber ganz der Funktion folgt bzw. folgen kann/sollte ist ein Trugschluss bei kommerziellen Produkten für ein breites Publikum. Akzeptanz, usability und pures Eye-Candy spielen fast eine so große Rolle wie die Funktion an und für sich. Daher lohnt es sich ab einem gewissen Anspruch in der Tat dafür eine separate Abteilung mit Spezialisten zu haben, bzw. bei Kleinproduktionen mehr Aufwand da rein zu stecken.

Der "Idee", ob es nicht auch weniger optimierter Code tut, wenn er denn macht was er soll stehe ich auch eher nicht so offen gegenüber. Man tut damit niemandem einen Gefallen, da ggf. Ausführungsgeschwindigkeit, viel mehr aber noch Wartbarkeit sehr leiden. Das ergibt dann beim User lange/keine Updatezyklen, und bei einem selbst viel Tippen und suchen und versuchen zu verstehen, was zum Henker man sich seinerzeit mal bei Code "X" überhaupt gedacht hat, bzw. man sich in den Hintern beisst, dass man für die popeligsten Funktionsanpassungen in 7 Units 31 Prozeduren anpassen muss, die auch erstmal zu suchen sind, in den 5000 Zeilen pro Unit. Warum wöllte man sich sowas freiwillig antun, wenn alles was es kostet ein wenig Hirneinschaltung bei der ersten Erstellung ist? :)


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