![]() |
Eingabebox mit Beschriftung
Hi,
weiß jemand, wie man auf das verschieben einer Komponente reagieren kann? wenn sich die Größe (width & height) ändert, wird wmSize gesendet aber was wenn left und top sich ändert? Das ganze soll für eine Kompnente z.B. TComboBox oder TEdit verwendet werden, die 'ihr eigenes' TLabel mit sich führt. Ich finde es umständlich im Formulardesigner ständig die Labels mit den zugehörigen Eingabeboxen neu auszurichten, außerdem wäre es doch chic den Beschreibungstext gleich als Eigenschaft in der Eingabekomponente zu haben. Das Problem mit TFrames zu lösen gefällt mir nicht, da auch hier im Formulardesigner oft was versehentlich verschoben werden kann. Eine Lösung ist folgender Ansatz, der aber nicht so super ist, da neue Eigenschaften für Left und Top erstellt werden müssen, die alten aber nicht ausgeblendet werden können. Aber grundsätzlich funktioniert es:
Delphi-Quellcode:
Wenn man nun auf Veränderungen von Left und Top reagieren könnte wäre es wesentlich
unit ComboBoxLabel;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TComboBoxLabel = class(TComboBox) private FText: string; FLeft: integer; FTop: integer; procedure SetText(Value: string); procedure SetLeft(Value: integer); procedure SetTop(Value: integer); protected CBLabel: TLabel; public constructor Create(Owner: TComponent); override; procedure SetParent(Value: TWinControl); override; published property Text: string read FText write SetText; property XLeft:integer read FLeft write SetLeft; property XTop:integer read FTop write SetTop; end; procedure Register; implementation constructor TComboBoxLabel.Create(Owner: TComponent); begin inherited Create(Owner); CBLabel:= TLabel.Create(Self); end; procedure TComboBoxLabel.SetParent(Value: TWinControl); begin inherited SetParent(Value); CBLabel.Parent:= Self.Parent; end; procedure TComboBoxLabel.SetText(Value: string); begin FText:= Value; CBLabel.Caption:= FText; end; procedure TComboBoxLabel.SetLeft(Value: integer); begin FLeft:= Value; Left:= FLeft; CBLabel.Left:= Left-80; end; procedure TComboBoxLabel.SetTop(Value: integer); begin FTop:= Value; Top:= FTop; CBLabel.Top:= Top; end; procedure Register; begin RegisterComponents('Beispiele', [TComboBoxLabel]); end; end. schöner |
Re: Eingabebox mit Beschriftung
mahlzeit,
spontan und ohne es getestet zu haben würde ich auf wm_move reagieren.
Delphi-Quellcode:
procedure WMMove(var msg: TMessage); message WM_Move;
|
Re: Eingabebox mit Beschriftung
Es gibt auch LabeledEdits, unter Zusätzlich oder Win32...
|
Re: Eingabebox mit Beschriftung
Samma', Andreas, war bei D7 Professional nicht schon TLabeledEdit dabei? Da könnte man sich doch einen Anreiz holen....
@3_of_8: Ja, aber noch nicht bei Delphi5. |
Re: Eingabebox mit Beschriftung
:-D hab es mit WMMove ausprobiert: einwandfrei. Danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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