AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Ein roter Punkt den man auf dem Desktop verschieben kann
Thema durchsuchen
Ansicht
Themen-Optionen

Ein roter Punkt den man auf dem Desktop verschieben kann

Ein Thema von HappyPunk · begonnen am 28. Dez 2005 · letzter Beitrag vom 31. Dez 2005
Antwort Antwort
Seite 1 von 3  1 23      
HappyPunk

Registriert seit: 28. Dez 2005
8 Beiträge
 
#1

Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 28. Dez 2005, 18:48
Hallo,

erstmal Hut ab vor eurer Arbeit,

ich hab mir vor 2 Tagen mehrere Bücher drüber gekauft und werde mich da durcharbeiten!!

Was ich aber gerne Suche ist folgendes:

Ein Programm das immer im Vordergrund ist (wie TSDisp)!

Es soll folgendes Darstellen:

einen roten Punkt, der ungefähr 2,5 mm groß ist und in der Position auf dem Desktop verschiebbar ist!!

Auf antworten oder ein kleines Programm wär ich dankbar!

P.S.

Ich bin ein Anfänger und würd mich freuen über eine normale Sprache!

thx

HappyPunk
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 28. Dez 2005, 21:58
Hi,
erstmal herzlich willkommen in der DP! P:

Du möchtest einen roten Punkt, der ständig im Vordergrund ist? Ok, wenn du's schön findest

Ich hab dir mal die Lösung angehangen.
Hier noch ein wenig Erklärung. An sich ist die Idee sehr einfach, du nimmst ein Formular (dies Hauptfenster das immer angezeigt wird). Würdest du dein Programm so starten, hast du ein leeres Fenster mit dieser Leiste oben, zum Schließen und minimieren usw. Diese Leiste möchtest du sicherlich nicht bei einem roten Punkt sehen, also schaltet man sie ab. Dazu findest du im Objektinspektor unter den Eigenschaften deines Forms BorderStyle, diese Eigenschaft änderst du auf BsNone (keine Titelleiste).

Als nächstes platzierst du ein TImage auf dem Form. Das ist eine Komponente in die du zeichnen kannst. Da hier dein Kreis reingezeichnet wird, machst du das TImage einfach so groß, wie dein Kreis später sein soll und das Form drum rum so klein, dass es genau mit der Image größe übereinstimmt.
Gut, du hast die Zeichenfläche, aber da ist jetzt noch kein roter Kreis drin. Macht nichts, kannst du ja zeichnen. Dazu wechselst du im Objektinspektor auf TForm1 (also dein Hauptformular) und klickst unter Ereignisse doppelt ins Feld OnCreate.
Hier fügst du die Routine zum zeichnen ein:
Delphi-Quellcode:
  // Zeichenfarbe (Pinsel) auf rot setzen
  self.Image1.Canvas.Brush.Color := clRed;
  // Kreis zeichnen
  self.Image1.Canvas.Ellipse(0, 0, self.Width, self.Height);
  // DoubleBuffer aktivieren (verhindert flackern)
  self.DoubleBuffered := true;
Soweit so gut. Wenn du jetzt startest, hättest du schon mal ein weißes Rechteck, mit einem roten Kreis drin. Toll, aber du wolltest sicherlich nur den roten Punkt, ohne rotes Rechteck? Dann machen wir weiß einfach mal etwas unsichtbar.
Dazu gehst du wieder auf deinen ObjektInspektor, auf das Form1 und suchst hier unter Eigenschaften TransparentColor. TransparentColor setzt du auf True und TransparentColorValue auf clWhite. Damit wird weiß transparent (also nicht mehr Sichtbar). Nun hast du also einen roten Kreis.

Wenn du diesen bewegen möchtest (mit der Maus) musst du auf Mausereignisse reagieren. Hierzu gehst du wieder auf den Objektinspektor, diesmal wählst du jedoch das Image.
Wird die Linke Maustaste gedrückt, so merkst du dir einfach, dass der Punkt bewegt wird und natürlich die Ausgangsposition.
Wird die Maus bewegt, so bewegst du den Punkt mit der Maus. Dazu berechnest du einfach den Unterschied zwischen der aktuellen Mausposition und den Ausgangskoordinaten. Natürlich solltest du den Punkt auch nur bewegen, wenn die linke Maustaste gedrückt ist.
Wird die linke Maustaste wieder losgelassen, so hörst du einfach mit dem Bewegen auf.
Dazu klickst du nacheinander doppelt auf OnMouseDown, OnMouseMove und OnMouseUp und fügst jeweils folgenden Code ein:
Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // prüfen ob die linke Maustaste gedrückt wurde
  if ssLeft in Shift then
    begin
      // aktuelle Mausposition merken
      self.lastX := Mouse.CursorPos.X;
      self.lastY := Mouse.CursorPos.Y;
      // Modus wechseln
      self.moving := True;
    end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  // wenn Modus moving aktiv
  if self.moving then
    begin
      // Position des Fensters relativ zu Mauskoordinaten ändern
      self.Left := self.Left + (Mouse.CursorPos.X - lastX);
      self.Top := self.Top + (Mouse.CursorPos.Y - lastY);
      // Merken der neuen Position
      self.lastX := Mouse.CursorPos.X;
      self.lastY := Mouse.CursorPos.Y;
    end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // Wenn Linke Maustaste losgelassen wurde
  if Button = mbLeft then
    begin
      // Modus moving verlassen
      self.moving := false;
    end;
end;
Die Variablen moving : Boolean und lastX sowie lastY musst du im Form noch unter private eintragen, fertig.
Das sollte klappen. Hoffe es wahr halbwegs verständlich.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 28. Dez 2005, 22:31
Moin,

nur zur Info: Es ginge auch ohen ein TImage, da das Formular selbst auch ein Canvas besitzt, auf dem Du zeichnen kannst.

Btw: Ich veranlasse mel eine verschiebung des Threads.
  Mit Zitat antworten Zitat
28. Dez 2005, 22:42
Dieses Thema wurde von "Daniel" von "Tools rund um Delphi" nach "Sonstige Fragen zu Delphi" verschoben.
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#5

Re: Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 28. Dez 2005, 23:02
Lass mich raten, du spielst gerne Shooter?
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
HappyPunk

Registriert seit: 28. Dez 2005
8 Beiträge
 
#6

Re: Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 29. Dez 2005, 17:41
Erstmal danke für die ausführliche Beschreibung!!

Ich probier des gleich mal aus!! ^^

und ja ich spiel gern shooter
  Mit Zitat antworten Zitat
HappyPunk

Registriert seit: 28. Dez 2005
8 Beiträge
 
#7

Re: Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 29. Dez 2005, 18:45
Ich hab das jetzt mal gemacht, aber wo ist mein Fehler??

P.S. ich vertsteh das min lastX Boolean und lastY nicht! Wie soll ich die auf private stellen?
Angehängte Dateien
Dateityp: pas unit1_168.pas (2,3 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#8

Re: Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 29. Dez 2005, 18:49
Das sind Variablen, die Delphi erst kennst, wenn du ihm das mitteilst. Um in der akt. Unit darauf zuzugreifen, deklariert man sie unter private. So:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
    Moving: Boolean // <- hier
    LastX, LastY: Integer; // <- und hier
  public
    { Public-Deklarationen }
  end;
  Mit Zitat antworten Zitat
HappyPunk

Registriert seit: 28. Dez 2005
8 Beiträge
 
#9

Re: Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 29. Dez 2005, 19:01
Ich weiß net was ich falsch mach!! ich mach des so wie es hier steht und wie ich es meinen Büchern entnehmen kann:

Delphi-Quellcode:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
// Zeichenfarbe (Pinsel) auf rot setzen
  self.Image1.Canvas.Brush.Color := clRed;
  // Kreis zeichnen
  self.Image1.Canvas.Ellipse(0, 0, self.Width, self.Height);
  // DoubleBuffer aktivieren (verhindert flackern)
  self.DoubleBuffered := true;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // prüfen ob die linke Maustaste gedrückt wurde
  if ssLeft in Shift then
    begin
      // aktuelle Mausposition merken
      self.lastX := Mouse.CursorPos.X;
      self.lastY := Mouse.CursorPos.Y;
      // Modus wechseln
      self.moving := True;
    end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  // wenn Modus moving aktiv
  if self.moving then
    begin
      // Position des Fensters relativ zu Mauskoordinaten ändern
      self.Left := self.Left + (Mouse.CursorPos.X - lastX);
      self.Top := self.Top + (Mouse.CursorPos.Y - lastY);
      // Merken der neuen Position
      self.lastX := Mouse.CursorPos.X;
      self.lastY := Mouse.CursorPos.Y;
    end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // Wenn Linke Maustaste losgelassen wurde
  if Button = mbLeft then
    begin
      // Modus moving verlassen
      self.moving := false;
    end;
    type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
    Moving: Boolean // <- hier
    LastX, LastY: Integer; // <- und hier
  public
    { Public-Deklarationen }
  end;
end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Ein roter Punkt den man auf dem Desktop verschieben kann

  Alt 29. Dez 2005, 19:03
Du hast in der Implementation zwei mal Image1MouseUp stehen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 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