AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Erstellen eines transparenten Rechtecks

Erstellen eines transparenten Rechtecks

Ein Thema von Barzy2x · begonnen am 1. Dez 2002 · letzter Beitrag vom 3. Dez 2002
Antwort Antwort
Barzy2x

Registriert seit: 1. Dez 2002
Ort: Ilmenau
23 Beiträge
 
#1

Erstellen eines transparenten Rechtecks

  Alt 1. Dez 2002, 21:10
Versuche zur Zeit ein Programm zu schreiben mit dem ich Zeitzonen und die jeweilige Zeit in diesen Zeitzonen ermitteln kann. Um das ganze benutzerfeundlicher zu machen, versuche ich ein transparentes Rechteck in ein Bild mit verschiedenen Zeitzonen einzubinden, damit der Benutzer über das Bild seine Zeitzone anklicken kann. Habe dazu ein Image in das Formular eingefügt. Weiß jemand ob und wie ich nun ein transparents Rechteck auf dieses Bild "legen" kann? Geht das mit TCanvas? Oder ist das mit einem Image gar nicht möglich?
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#2
  Alt 1. Dez 2002, 21:20
Hallo Barzy2x und Wilkommen,

wäre es nicht einfacher, die Koordinaten abzufragen, in denen der User geklickt hat?!?

Hier ist mal ein Beispiel, wie man einen Edit unsoichtbar macht und dennoch drauf reagieren kann.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit6.Brush.Style := bsClear;
  Edit6.BorderStyle := bsNone;
end;

procedure TForm1.Edit1Click(Sender: TObject);
begin
  ShowMessage('Klick!');
end;
Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#3
  Alt 1. Dez 2002, 21:26
Hallo und Willkommen.
Du kannst auch das OnMouseDown Ereignis nehmen, und dann die Koordinaten abfragen.
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#4
  Alt 1. Dez 2002, 21:37
Kordinaten kannst Du zum Bleistift mit sowas abfragen:
Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage('X=' + IntToStr(Mouse.CursorPos.X) + #13 + 'Y=' + IntToStr(Mouse.CursorPos.Y));
end;
Grüsse, Daniel
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#5
  Alt 1. Dez 2002, 21:42
Noch ein Einfall:
um die Bewegung "ständig" zu Überwachen, kannst Du dies noch benutzen:
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Label1.Caption := IntToStr(Mouse.CursorPos.X);
  Label2.Caption := IntToStr(Mouse.CursorPos.Y);
end;
Somit müsstest Du nicht mehr auf klicken reagieren, sndern könntest immer sofort bei Bewegungen, Deine Zeitzone anzeigen.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Barzy2x

Registriert seit: 1. Dez 2002
Ort: Ilmenau
23 Beiträge
 
#6
  Alt 1. Dez 2002, 23:32
Die Idee mit den Koordinaten ist sehr hilfreich und ich werde sie sicherlich verwenden. Dennoch bleibt noch das Problem, dass ich die ausgewählte Zeitzone farblich hervorheben möchte.Habe dazu folgende (Test)procedure geschrieben:

procedure TZeitzone.ImageZZClick(Sender: TObject);

begin
with Zeitzone.ImageZZ do begin
Canvas.Pen.Style := pssolid ;
Canvas.Brush.Color := clred;
Canvas.Rectangle(322,429,337,645);

end;
end;

Der Effekt sollte sein, dass auf dem ImageZZ (nach anklicken) zumindest ein Viereck erscheint, das die gewählte Zeitzone markiert. Dies ist nicht der Fall.
Da ich mich erst seit kurzem mit Delphi beschäftige bin ich mir auch nicht sicher ob ich überhaupt irgendetwas auf ein Image projezieren kann. Gibt es vielleicht bessere Methoden?
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#7
  Alt 2. Dez 2002, 11:57
Hallo Barzy2x, was passiert denn bei deiner Prozedur?
Das Problem dürfte auch sein, dass du das Rechteck ja auch wieder löschen musst, wenn du eine andere Zeitzone anklickst. Ich würde dir deshalb raten:
Nimm statt einer TImage Komponente eine TPaintBox.Das Bild, das du vorher im Image hattest lädst du in den Speicher (siehe TBitmap), dieses Bitmap kannst du dann immer beim Neuzeichnen (OnPaint der TPaintBox) auf die PaintBox (PaintBox.Canvas) zeichnen, und dazu dein Rechteck. Der Vorteil ist, dass du das eigentliche Bild nicht verändern musst, bei Bedarf zeichnest du das Bild einfach neu und hast kein altes Rechteck mehr drauf, beim TImage hingegen wird jede veränderung (beim zeichnen auf das Canvas) automatisch gespeichert.
Ich weiß jetzt nicht wie weit du damit umgehen kannst, du kannst dich bei Bedarf ja melden dann schreib ich dir eine Beispiel-Programmablauf.

Gruß, Sebastian
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#8
  Alt 2. Dez 2002, 13:55
Hallo nochmal, was mir auch noch eingefallen ist:
Das TCanvas hat die Methode DrawFocusRect, die ist eigentlich genau das richtige für Markierungen. Im OnClick-Ereignis schreibst du also
Code:
Image1.Canvas.DrawFocusRect(rect(x1,y1,x2,y2));
x1,y1,x2,y2 sind die Koordinaten des Rechteckes.
Das gute bei DrawFocisRect ist, dass es sich auch umkehren lässt: Führst du nochmal den gleichen Befehl, mit den selben Koordinaten aus, so verschwindet das Focusrect wieder. Du musst dir also beim OnClick die Koordinaten merken (sprich in globale Variablen speichern), beim nächsten OnClick das alte Rect löschen (DrawFocusRect mit den alten Koordinaten aufrufen), dann mit den neuen Koordinaten, welche du dir dann auch wieder merkst. Auf diese Art und Weise musst du nicht viel an deinem Programm ändern, du kannst das TImage behalten.

Gruß, Sebastian
  Mit Zitat antworten Zitat
Nostromo

Registriert seit: 3. Dez 2002
2 Beiträge
 
Delphi 6 Enterprise
 
#9
  Alt 3. Dez 2002, 20:24
Hallo,

wieso nimmst du nicht ein Panel das du an der Klick-Position auf Visible setzt. Auf dem Panel kannst du auch deinen Text verewigen.
Wozu denn aufwändig im Bild malen?

Du kannst ein Bild mit PaintShop/Photoshop bearbeiten und dort alle Zeitzonen beliebig einfärben.
Dieses Bild lädst du dann in ein Image und kannst die Zeit je nach gewählter Farbe unterhalb des Cursors anzeigen.
liebe grüsse
Jürgen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf