Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm zeichnen (https://www.delphipraxis.net/111619-delphi-programm-zeichnen.html)

Larsi 6. Apr 2008 19:12

Re: Delphi Programm zeichnen
 
Warum denn perfekt? Also ich finde wenn man was skizziert ist es praktisch wenn man es schnell einscannt und zu ner GUI macht als wenn man dann nochmal alles nochmal übertragen muss!

busybyte 6. Apr 2008 19:13

Re: Delphi Programm zeichnen
 
So schwer ist das auch nicht umzusetzen,da man ja das eingescannte Bild als Bitmap(Jpg/Png).canvas abscannen/verarbeiten könnte.

Larsi 6. Apr 2008 19:16

Re: Delphi Programm zeichnen
 
Meine Rede :)

busybyte 6. Apr 2008 19:17

Re: Delphi Programm zeichnen
 
Ansatz:
Delphi-Quellcode:
**********************************************
*  grüße and ahmet von smallsmoker           *
*  differenzbild prozedur von alleinherrscher *
**********************************************}
unit uDifferenzbild;

interface

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

type
  TForm1 = class(TForm)
    imDiff: TImage;
    imScr1: TImage;
    imScr2: TImage;
    btnScr1: TButton;
    btnDiff: TButton;
    btnScr2: TButton;
    imNew: TImage;
    btnNew: TButton;
    procedure btnScr1Click(Sender: TObject);
    procedure btnScr2Click(Sender: TObject);
    procedure btnDiffClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnNewClick(Sender: TObject);
  private
    { Private-Deklarationen }
    scr1,scr2,diff:tbitmap;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
// Die Screenshot prozedur
procedure ScreenShot(DestBitmap:TBitmap; bmpxfr:integer);
var dc : HDC;
begin
  try
  dc := getdc(getdesktopwindow);
  destbitmap.width := getdevicecaps (dc, horzres);
  destbitmap.height := getdevicecaps (dc, vertres);
  if bmpxfr= 4 then destbitmap.pixelformat:=pf4bit
  else if bmpxfr=8 then destbitmap.pixelformat:=pf8bit
  else if bmpxfr=16 then destbitmap.pixelformat:=pf16bit
  else if bmpxfr=24 then destbitmap.pixelformat:=pf24bit
  else if bmpxfr=32 then destbitmap.pixelformat:=pf32bit;
  bitblt(destbitmap.canvas.handle,
         0,
         0,
         destbitmap.width,
         destbitmap.height,
         dc,
         0,
         0,
         srccopy);
  except
    exit;
  end;
end;

// Die prozedur die das differenzbild erzeugt
procedure GetDifference(ZielDC,DC1,DC2:HDC;DCwidth:integer;DCheight:integer);
begin
BitBlt(ZielDC,0,0,DCwidth,DCheight,DC2,0,0,SRCCOPY);
BitBlt(ZielDC,0,0,DCwidth,DCheight,DC1,0,0,SRCINVERT);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
scr1 := tbitmap.create;
scr2 := tbitmap.create;
diff := tbitmap.create;
end;

// Der erste Screenshot wird gemacht und in scr1 gespeichert, das wiederum wird in imscr1 angezeigt
procedure TForm1.btnScr1Click(Sender: TObject);
begin
screenshot(scr1,32);
imscr1.picture.bitmap := scr1;
imscr1.Repaint;
btnscr2.Enabled := true;
end;

// Der zweite Screenshot wird gemacht und in scr2 gespeichert, das wiederum wird in imscr2 angezeigt
procedure TForm1.btnScr2Click(Sender: TObject);
begin
screenshot(scr2,32);
imscr2.picture.bitmap := scr2;
imscr2.Repaint;
btndiff.Enabled := true;
end;

// Der Differenzbild von scr1 und scr2 wird erstellt
procedure TForm1.btnDiffClick(Sender: TObject);
begin
diff := tbitmap.Create;
  try
  diff.Width := min(scr1.Width, scr2.Width);
  diff.Height := min(scr1.height, scr2.height);
  GetDifference(diff.Canvas.Handle,
                Scr1.Canvas.handle,
                scr2.Canvas.handle,
                diff.Width,
                diff.Height);
  imDiff.Picture.bitmap := diff;
  imDiff.Repaint;
  btnnew.Enabled := true;
  finally
    scr2.Free;
  end;
end;

// scr1 wird in newpic kopiert, und das differenzbild wird auf newpic gelegt
procedure TForm1.btnNewClick(Sender: TObject);
var newpic:tbitmap;
begin
newpic := tbitmap.Create;
  try
  newpic := scr1;
  newpic.Width := diff.Width;
  newpic.Height := diff.height;
  bitblt(newpic.Canvas.handle,
          0,
          0,
          diff.Width,
          diff.Height,
          diff.Canvas.handle,
          0,
          0,
          SRCINVERT);
  imnew.Picture.bitmap := newpic;
  imnew.Repaint;
  finally
    scr1.free;
    diff.Free;
  end;
end;

end.

lbccaleb 6. Apr 2008 20:45

Re: Delphi Programm zeichnen
 
also ich halte das auch mal für ne supert idee, und umsätzbar währe das ja auch!! naja wobei ich von mir selber auch behaupten kann das ich bei der guten alten methode bleib ;-)

naja wenn du willst ich hab mal was mit scannern gemacht, da kann ich dir in der richtung noch ein bisschen was übermitteln wenn du willst, musst mich dann nur anschreiben!!

s-off 6. Apr 2008 23:12

Re: Delphi Programm zeichnen
 
Zitat:

Zitat von Larsi
Warum denn perfekt? Also ich finde wenn man was skizziert ist es praktisch wenn man es schnell einscannt und zu ner GUI macht als wenn man dann nochmal alles nochmal übertragen muss!

Und dann? Meinst Du, die Anordnung der einzelnen Controls sieht dann schön aus? Du müsstest in jedem Fall nochmal manuell Hand anlegen, wenn Du nicht willst, dass der Anwender sich vorkommt wie in einem Rübenfeld.

Naja, es sei denn, Du schreibst noch als Anweisung 'Controls bitte sinnvoll ausrichten' drunter :lol:

Namenloser 6. Apr 2008 23:44

Re: Delphi Programm zeichnen
 
Ein anderes Problem wären Panels: woher soll das Programm wissen, ob ein Button darüber liegt, oder darn? Spätestens bei TabControls bekommst du sowieso Probleme.

Dunkel 7. Apr 2008 00:28

Re: Delphi Programm zeichnen
 
Hmm... interessanter fände ich, wenn ein Programm dazu in der Lage wäre, aus einem Pflichtenheft ein fertiges Programm zu basteln; der fertige Quelltext würde mir persönlich auch schon reichen. :wink:

Mal im Ernst: die Idee ist ganz OK. Nur ist die RAD-Umgebung von Delphi IMHO schon so komfortabel, dass man sie nicht mehr großartig verbessern kann. Und warum sollte ich analoge Hilfsmittel (Blatt Papier & zig Buntstifte) in die Hand nehmen, wenn die digitale Technik IMHO präziser und unkomplizierter zu handhaben ist?! Eine unterwegs gemachte Skizze der GUI in Delphi umzusetzen ist das kleinste Übel der Programmierung.

Larsi 7. Apr 2008 13:32

Re: Delphi Programm zeichnen
 
Hi,
es geht schnell voran in der Version die ich bald uppen werden kann man schon ein Blatt Papier mit nem roten Viereck in das Programm einfügen und dann wird dort ein edit erstellt! :)


Mir kommt grade ne Frage auf: Wie eschafee ich es zb ein Dunkelrot codetechnisch zu einem normalen rot gemacht wird von Delphi??

Relicted 7. Apr 2008 14:00

Re: Delphi Programm zeichnen
 
Zitat:

Zitat von Dunkel
Hmm... interessanter fände ich, wenn ein Programm dazu in der Lage wäre, aus einem Pflichtenheft ein fertiges Programm zu basteln; der fertige Quelltext würde mir persönlich auch schon reichen. :wink:

pflichtenheft wird überbewertet... usb verbindung zum hirn und dann über gedanken ein programm entwickeln!

Zitat:

Zitat von Dunkel
Mal im Ernst: die Idee ist ganz OK. Nur ist die RAD-Umgebung von Delphi IMHO schon so komfortabel, dass man sie nicht mehr großartig verbessern kann. Und warum sollte ich analoge Hilfsmittel (Blatt Papier & zig Buntstifte) in die Hand nehmen, wenn die digitale Technik IMHO präziser und unkomplizierter zu handhaben ist?! Eine unterwegs gemachte Skizze der GUI in Delphi umzusetzen ist das kleinste Übel der Programmierung.

interessant wirds nur wenn man in richtung WPF (windows presentation foundation) geht.. da kann man ja buttons bauen die die beklopptesten formen, farben usw. haben. und das ganze auch noch als vektorgrafik. wenn man einen begabten zeichner hat könnte sich sowas sicherlich lohnen :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz