![]() |
Hi Motzi,
du sprichst mir aus dem Herzen und nun bin ich auch richtig gespannt. Gruß oki |
ich muß diese Aussage hier mal zitieren:
Zitat:
|
Zitat:
BTW: hab vor kurzem eine kleine Seite gebastelt wo man sich ein paar meiner "Schöpfungen" ;) downloaden kann. Unter anderem auch meine OOP-Ausarbeitung. Just in case falls es jemanden interessiert... :roll: ![]() |
Liste der Anhänge anzeigen (Anzahl: 1)
So, wie versprochen mein Code... das einzige was ich noch nicht eingebaut/übernommen hab war die MaxNachkomma-Eigenschaft, aber das könnt ihr ja nachholen (allerdings würd ich mir nen andren Namen überlegen ;) ).
|
Hi Motzi,
"Monster-Thread" geht anscheinend noch weiter. Demnächst sind wohl 1000 Zugriffe zu verzeichnen. Dein Code geht, bis auf einen Schönheitsfehler: Das label ist nicht zentriert, dafür gehen die datensensitiven Felder aber. Drucke mir das ganze mal aus. Als Anlage ist hier noch ein Icon? dabei für die Objektablage (DBlabeledEdit). Viel Spaß beim installieren. Typ DCR (=Delphi compiled Ressource). Das ist, um ein eigenese Symbol zu haben und nicht das des Vorfahr-Objektes.
Code:
So muß das ganze ungefähr in eine neue Komponente.
{$R lbledit.dcr}
procedure Register; /Edit: wo war die Datei auf einmal? |
Liste der Anhänge anzeigen (Anzahl: 1)
DCR ist verboten! Datei muß deshalb wie beschrieben umbenannt werden. So ein Unfug aber auch. 8) :mrgreen:
@Gerome: Nach Vorschau ist der Anhang nicht mehr angehängt |
Hi Motzi.
Hast du Zeit die ich nicht hab, oder diktierst du deinen Code in den Rechner? Für so'n kleines Projekt nebenbei hast du erst mal meine Hochachtung für die Arbeit. Ich hab mich sehr gefreut, dass du auch so'n bischen was von mir übernommen hast. Scheint also doch etwas zu taugen wenn ich was schreibe. Übrigens: Hansas Zitat ist nicht dumm, aber wo er das her hat hab ich auch nicht geschnallt. Es macht den Eindruck, als ob wir hier doch was umfangreicheres programmieren könnten. Jedenfalls sieht es so aus, als ob uns drei das hier interessiert. Wir sollten mal notieren was wir noch so alles in unserem neuen Edit haben wollen, und uns die Arbeit daran teilen. So das jeder mindestens eine eigenständige Aufgabe hat. Die Hilfe untereinander wenn einer nicht weiter kommt ergibt sich automatisch. Veröffentlichen wir den Code immer zwischendurch, do kann jeder auch unabhängig Tipps für Verbesserungen geben. Also, an solchen Kleinigkeiten wie Nachkommastellen kann ja einer eigenständig berbeiten. Da müssen bestimmt nicht drei ran. Mit so einer Teilung könnte auch ich Sachen zu Ende bringen wenn weniger Zeit zur Verfügung steht ohne immer gefrustet zu sein, weil jemand anders schneller ist. So, das war wieder ein Beitrag von mir zum Monster-Thread Gru oki |
Hi Motzi,
irgentwo hab ich hier ein Problem. Ich kann die Komponente nicht installieren. Selbst mit Hinzufügen bekomme ich die pas nicht in die Rubrik "Contains" im Package-Compiler-Faenster. Was ist das? Gruß oki |
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe folgendes verändert :
1. abgeleitet wird von TEdit und nicht von TDBEdit (wegen Pers.-Besitzer) 2. MaxNachKomma ist wieder eingebaut (@Motzi: wie soll man das sonst nennen?) 3. das Label ist standardmäßig links Letzteres habe ich gemacht, weil das 80% der Fälle ausmacht und, damit man sieht, daß die Ausrichtung noch nicht stimmt. |
So ist das Label auch rechts und links in der Höhe zentriert zum Edit ausgerichtet (das dient dazu, den Höhenunterschied zwischen Edit und label auszugleichen / anzupassen):
Code:
Was mir aber an dem Ding noch nicht gefällt, ist die Tatsache, daß bei mehreren dieser Komponenten, die untereinander stehen, der linke Rand zerfranst. Besser wäre es, man hätte die Option, z.B. MaxLabelLänge und würde die entsprechenden Label rechts mit blanks auffüllen, so daß das ganze bündig wird. Leider kann ich jetzt nicht mehr am Thema bleiben.
procedure TLabeledRealEdit.SetLabelPos;
begin if not Assigned(FLabel) then Exit; case FLabelAlignment of lpAbove : begin FLabel.Top := Top - FLabel.Height - FLabelDistance; FLabel.Left := Left; if FLabelOptions.AutoEditSize then FLabel.Width := Width; end; lpLeft : begin FLabel.Top := Top + ((Height - FLabel.Height) div 2); FLabel.Left := Left - Flabel.Width - FLabelDistance; if FLabelOptions.AutoEditSize then FLabel.Height := Height; end; lpRight : begin FLabel.Top := Top + ((Height - FLabel.Height) div 2); FLabel.Left := Left + Width + FLabelDistance; if FLabelOptions.AutoEditSize then FLabel.Height := Height; end; lpBelow : begin FLabel.Top := Top + Height + FLabelDistance; FLabel.Left := Left; if FLabelOptions.AutoEditSize then FLabel.Width := Width; end; end; end; |
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zu 2.: keine Ahnung :) aber es ist üblich Englische Namen zu vergeben und so ein "Pseudo-Deutscher" Name klingt nicht nur besch**** sondern wenn die Kompo veröffentlicht wird wird jemand der der deutschen Sprache nicht mächtig ist ;) mit einer Eigenschaft namens "MaxNachkomma" nicht viel anfangen können ;) Einfach mal nachschaun was "Nachkommastelle" auf englisch heißt... Zu 3.: wie meinst du standardmäßig links? den letzten Satz check ich übrigens auch nicht ganz.. ;) Zitat:
|
Delphi Personal Edition hat keinerlei Datenbank-Funktionen. Der letzte Satz ist bereits überholt, siehe mein letztes Posting. Das mit den zerfransten Labels kommt übrigens nicht durch die falsche Ausrichtung, sondern dadurch, daß die Width des Labels auf die Länge der Caption eingestellt ist.
|
Zitat:
Zitat:
|
hab mir das Teil jetzt mal wieder genauer angesehen. Da sind noch ein paar Fragen/Fehler aufgetaucht. Folgendes ist schlecht:
1. Wird die Caption des Labels geändert, überschreibt irgendwas die Width dieses Labels. Das nimmt dann nur die Länge ein, wie lang der Caption-String halt ist. 2. Word-Wrap geht auch nicht. Hängt wahrscheinlich mit 1. zusammen. jetzt noch ein paar Fragen (@Motzi): 1. warum verwendest Du bei den Set... Prozeduren const-Parameter? 2. SetLabelPos wird sehr oft aufgerufen, warum? und last but not least: muß das forward deklariert werden? |
Zitat:
Zitat:
Zu 2.: SetLabelPos wird immer dann aufgerufen wenn die Möglichkeit besteht, dass die Labelposition/größe geändert wurde. Wenn zb AutoSize auf True ist und die Schriftart verändert wird, dann wird die Größe des Labels an die neue Schrift angepasst. Daher wird beim setzen der Font im Nachhinein auch SetLabelPos aufgerufen, damit auf eine eventuelle Positions-/Größenänderung reagiert wird. |
Hi Motzi,
erstaunlicherweise läßt sich die Komponente heute ohne jegliches zutun meinerseitz problemlos installieren. Egal was es war, hauptsache es funzt. Das mit der Labelgröße nach Caption-Änderung ist doch ganz klar auf die Eigenschaft AutoSize des Labels zurückzuführen. Jetzt muß nur noch eingearbeitet werden, dass bei Setzen der Eigenschaft auf False die Größenzuordnung des Edit übernommen wird. Gruß oki |
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute,
ich hab das mal schnell geändert mit der Größe des Labels in Bezug auf die Eigenschaft AutoSize. Hier währe die Frage ob die Größenänderung des Weite des Labels bei rechts- und linksbündiger Ausrichtung gewünscht ist. Gleiche Frage kann man für die Höhe bei Ausrichtung lpTop und lpBottom stellen. Macht mal einen Vorschlag und ich würde das gerne einarbeiten. Gruß oki |
Zitat:
|
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Motzi,
das mit AutoEditSize hab ich auf die Schnelle übersehen.Ich hab den Behandlungscode dorthin verschoben. Die Frage währe jetzt ob wir noch mal explizit auf Labelhöhe und -Breite in Bezug auf Labelposition reagieren. Gruß oki |
Hi,
das Thema geht noch weiter, auch wenn es nur wenige interessiert. Ich habe hier einen Code, den ich aus weltweiten Bestandteilen zusammengestückelt habe. Ich finde, der Code ist sehr einfach, aber effizient. Dabei geht es allerdings um eine ListBox mit Label:
Delphi-Quellcode:
[edit=Daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit]
unit labeledlistbox;
interface uses Controls, stdctrls, ExtCtrls, Classes; procedure Register; implementation type TMyListBox = Class( TCustomPanel ) private FLabel: TLabel; FListBox: TListBox; procedure SetLabelCaption(const Value: String); function GetLabelCaption: String; function GetListBoxItems: TStrings; function GetListBoxItemIndex: Integer; function GetListBoxOnClick: TNotifyEvent; procedure SetListBoxItemIndex(const Value: Integer); procedure SetListBoxOnCLick(const Value: TNotifyEvent); public constructor Create( AOwner: TComponent ); override; destructor Destroy; override; published property Font; property LabelCaption: String read GetLabelCaption write SetLabelCaption; property ListBoxItems: TStrings read GetListBoxItems; property ListBoxItemIndex: Integer read GetListBoxItemIndex write SetListBoxItemIndex; property ListBoxOnClick: TNotifyEvent read GetListBoxOnClick write SetListBoxOnCLick; end; constructor TMyListBox.Create(AOwner: TComponent); begin inherited Create( AOwner ); FLabel := TLabel.Create( Self ); FLabel.Parent := Self; FLabel.Align := alTop; FLabel.Caption := 'LABEL_CAPTION'; FListBox := TListBox.Create( Self ); FListBox.PArent := Self; FListBox.Align := alClient; end; destructor TMyListBox.Destroy; begin FLabel.Free; FListBox.Free; inherited Destroy; end; function TMyListBox.GetLabelCaption: String; begin Result := FLabel.Caption; end; function TMyListBox.GetListBoxItemIndex: Integer; begin Result := FListBox.ItemIndex; end; function TMyListBox.GetListBoxItems: TStrings; begin Result := FListBox.Items; end; function TMyListBox.GetListBoxOnClick: TNotifyEvent; begin Result := FListBox.OnClick; end; procedure TMyListBox.SetLabelCaption(const Value: String); begin if FLabel.Caption <> Value then begin FLabel.Caption := Value; Invalidate; end; end; procedure TMyListBox.SetListBoxItemIndex(const Value: Integer); begin if FListBox.ItemIndex <> Value then begin FListBox.ItemIndex := Value; Invalidate; end; end; procedure TMyListBox.SetListBoxOnCLick(const Value: TNotifyEvent); begin FListBox.OnClick := Value; end; procedure Register; begin RegisterComponents('Additional', [TMyListBox]); end; end. |
Das ist natürlich auch eine Möglichkeit... dann hat man halt das Panel drunter (falls es wenn stört)... eine Möglichkeit wäre dann noch eventuell über eine Eigenschaft die Klasse des 2ten Objekts (in dem Fall die Listbox) festlegen zu können.. dann wäre es sehr flexibel (auch wenn mir die Version ohne Panel lieber ist)!
|
hast Du es ausprobiert ? Bei mir ist vom Panel nichts zu bemerken. Muß den Quelltext noch durchlesen. Bei so einem kurzen Quelltext war ich aber doch etwas verblüfft. Großteil kommt von Borland selber. Die wissen natürlich am besten wie so was geht. 8)
[EDIT] ich suche mal die Beschreibung bzw. den Kommentar dazu von Borland |
Zitat:
Die Methode ist auf jeden Fall einfacher, aber sie hat auch nachteile.. so kann man zb nicht den Abstand des Labels zur Listbox einstellen... |
Hi Leute.
Das ein Panel idealer für die Lösung sein kann hab ich schon vorher vermutet. Na und!!! Ich klare hier nicht mit um rauszukriegen wie man das Thema mit drei Zeilen hinbekommt indem man fertige Sachen von Borland sucht, sondern sehe hier die Changs Verfahrensweisen zu erarbeiten die mir helfen schnell eigene Kompos für meine Projekte zu schreiben wenn keine einfachen Lösungen zu finden sind. Und ich muß sagen, wenn ich nur an Motzis Wrapper-Thema denke stelle ich fest, dass das eigentlich ganz easy ist, mann muß es nur mal gesehen haben und wissen. Eigentlich brauche ich momentan auch kein LabeledEdit. Man lernt was und es macht Spaß. Deshalb mach ich hier mit. Also wenn ihr einverstanden seid, dann würde ich an unserem Edit weiterarbeiten. Wir sollten uns hier lieber zu dem Beispiel die Frage stellen was besser ist. Label an Edit ankleben? oder: Edit an Label ankleben? Gruß oki |
Hi,
das Beispiel sollte nur ein Denkanstoß sein. Ich war verblüfft, mit welch minimalem Aufwand so was hinzukriegen ist. ich fasse mal zusammen, was an "unserem" LabeledRealEdit gut ist: 1. Label und Edit bilden eine Einheit, was alleine schon deshalb ein Vorteil ist, da man einen aussagekräftigen Namen nicht extra noch dem label zuweisen muß. 2. Bei visuellen Operationen (verschieben, löschen usw.) braucht man das nur einmal zu machen. 3. Die Labelposition und Abstand zum Edit kann eingestellt werden 4. Für Zahleneingaben gibt es eine Taschenrechner (rechtsbündige) Eingabe 5. Bei Zahlen kann nur ein Decimalseperator eingegeben werden, was Eingaben wie 1,,43,,4,4,44 verhindert 6. maximale Anzahl an Nachkommastellen wird berücksichtigt 7. das ganze geht auch mit DB-Komponenten, dazu muß nur die neue Klasse statt von TEdit von TDBEdit abgeleitet werden usw. Was mir nicht gefällt: Die Größe des Edit-Eingabefeldes kann in der IDE geändert werden, die des Labels aber nicht. Da ist es etwas mühsam mit Labelspacing oder Änderung der Caption (blanks anhängen) dieses anzupassen. Ich kann jetzt nur von mir berichten, da ich nicht weiß, was ihr programmiert. Ich habe ein paar Eingabemasken (bis zu 4 TabSheets), da sieht es ziemlich wüst aus, wenn nicht mal die Labels und Edits untereinander stehen. Das verstehe ich nicht: Zitat:
Zitat:
ich bin dabei es so zu machen (das DB kann man sich ja wegdenken): - TDBLabeledEdit: Standard linksbündige Eingabe, alle Zeichen sind möglich, kein Maxkomma oder OnlyReals (das fällt eh weg) - TDBLabeledIntEdit: rechtsbündige Eingabe, nur Zahlen, kein Komma - TDBLabeledRealEdit : wie TDBLabeledIntEdit, EIN Komma wird zugelassen, MaxNachkomma kommt hinzu so, das wärs vorerst. |
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
das Label "klebt" mir noch zu fest am Edit. Da fällt mir nichts zu ein. Aber ich habe das ganze mal aufgeteilt und etwas aufgeräumt. Da sich außer oki und Motzi keiner beteiligt, habe ich das übrigens jetzt wirklich nur DB-spezifisch gemacht. Jetzt gibt es 3 Typen: TDBLabeledEdit, TDBLabeledIntEdit, TDBLabeledRealEdit Ersteres schnappt alles, das zweite nur ganze Zahlen, das dritte auch EINEN DecimalSeparator. Die letzten beiden sind standardmäßig rechtsbündig, das erste linksbündig. Was für mich noch offen ist: Muß noch ein destructor zusätzlich da irgendwo rein? Hat einer nur Delphi-Pers. muß das DB in den Deklarationen eben weg. |
Hi,
muß den "Monster-Thread" etwas wiederbeleben. Also das Delphi 6 LabeledEdit ist jetzt schon ganz gut zusammengebastelt (bzw. nachgebaut), aber was noch fehlt: das Label selber. Das ist ja jetzt alles im OI drin, aber es wäre besser man könnte zur Entwurfszeit das Label ziehen, also größer machen. Mit LabelSpacing geht das zwar, ist aber recht mühsam, bei vielen Labels. Man müßte es ungefähr so behandeln wie das Edit. Also die Größe verändern und die Ausrichtung festlegen. Und dazu fällt mir nichts ein. EDIT: bis jetzt sind 1250 Zugriffe zu verzeichnen, auch kommt es mir so vor, daß einige sich über das Thema an sich Gedanken machen. Im Zusammenhang kommen einige Fragen. Vor dem Thread hab ich kaum was gesehen, nur: wo kriege ich eine Komponente her, die mir ein X fürn U macht, egal wie die das macht. :mrgreen: |
Zitat:
Zitat:
|
Zitat:
Zitat:
|
Zitat:
Zitat:
|
Re: OOP-TRealEdit von TEdit abgeleitet und Fähigkeiten erwei
Hi,
das Thema ist noch offen. Und zwar geht es darum, das Label im OI visuell zu verschieben, also die Größe zu verändern. Wie macht man das am besten ? Bzw. wie überhaupt ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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