AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TImage in Runtime mit Maus verschieben
Thema durchsuchen
Ansicht
Themen-Optionen

TImage in Runtime mit Maus verschieben

Ein Thema von Antonov · begonnen am 11. Apr 2014 · letzter Beitrag vom 12. Apr 2014
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.501 Beiträge
 
Delphi 12 Athens
 
#2

AW: TImage in Runtime mit Maus verschieben

  Alt 11. Apr 2014, 09:45
Zitat:
SetCapture(TWinControl(Sender).Handle);
TImage, TLabel, TShape usw. sind keine "eigentständigen" Window-Controls. (TStaticText ist seitens Windows das eigentlich "TLabel")

Diese haben kein eigenes Handle (HWND und vorallem kein eigenes Canvas) und sie zeichnen sich direkt auf ihrem Parent, wo sie sich sich "hinterhältig" reingehäckt haben.


Sooooo, und beim Debuggen, was mal am wirklich lernen sollte, wäre dir aufgefallen, dass dieses TImage kein TWinControl ist und somit der Code in OnMouseDown garnicht ausgeführt wird.
> Denn die Genannten sind alles Nachfahren von TGraphicControl


[edit]
Versuch es mal so:
Delphi-Quellcode:
procedure TForm1.ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if chkPositionRunTime.Checked then
  begin
    inReposition := True;
    GetCursorPos(oldPos);
    if Sender is TWinControl then
      SetCapture(TWinControl(Sender).Handle);
  end;
end;
Und was im OnMouseMove geändert werden muß, weiß ich jetzt nicht direkt, aber tausch dort mal das TWinControl gegen ein TControl aus und schau was von dem code dann nicht mehr geht.

PS: Vorallem als Anfänger würde ich dir empfehlen lieber weiche Castes/Konvertierungen wie (Sender as TWinControl) zu verwenden, anstatt den harten Castes ala TWinControl(Sender) .
Diese lassen sich problemlos austauschen, aber bei den harten Casts ist keine automatisch Typprüfung vorhanden.
Im ControlMouseDown wurde zwar vorher via IS geprüft, aber im ControlMouseMove würde es nun womöglich "ungeprüft" knallen (eine Exception), nach meinen Änderungen im ControlMouseDown.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Apr 2014 um 10:01 Uhr)
  Mit Zitat antworten Zitat
 


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:34 Uhr.
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