Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Button besonderes markieren (https://www.delphipraxis.net/114800-button-besonderes-markieren.html)

Delphiturbo 31. Mai 2008 19:37


Button besonderes markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe mehrere BitBtn Buttons und möchte ich das Button
irgendwie besonderes markieren, wenn sein Name in Feld Edit1.Text steht

Hat jemand eine Idee?
Nicht unbedingt eine Markierung wie im Bild

rollstuhlfahrer 31. Mai 2008 19:39

Re: Button besonderes markieren
 
Button gibts mit FindComponent();. Das markieren geht mit Canvas, falls du es noch nicht erledigt hast.

rollstuhlfahrer

Fussball-Robby 31. Mai 2008 19:43

Re: Button besonderes markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab hier ein kleines Demo dazu rumliegen, das ich irgendwann mal programmiert hab. Vielleicht hilft es dir.

Delphiturbo 31. Mai 2008 19:49

Re: Button besonderes markieren
 
Ich möchte z.B. ein Shape mit einem Timer auf das Button positionieren
z.B.

Delphi-Quellcode:
//shape1.left:=BitBtn1.left;
shape1.left://nun muss ich den BitBtn-Namen, der sein Name in Edit1.Text steht nehmen !!!
:gruebel:

Fussball-Robby 31. Mai 2008 19:50

Re: Button besonderes markieren
 
Guck dir doch einfach mal mein Demo an :roll:

Delphiturbo 31. Mai 2008 19:57

Re: Button besonderes markieren
 
Zitat:

Zitat von Fussball-Robby
Guck dir doch einfach mal mein Demo an :roll:

Die Markierung finde ich sehr schön
Ich möchte aber nicht jedes Objekt markieren, wo der Cursor gerade sich befindet,
sondern nur das Objekt, das sein name in Edit1 steht

kann man den Code so anpassen ?

FAlter 31. Mai 2008 20:00

Re: Button besonderes markieren
 
Hi,

ich hab mal schnell was probiert weil einfach so :nerd:

Aber versuche es bitte wenigstens zu verstehen, der rote Kasten sagt mir, dass du das noch nicht probiert hast. :(

FindComponent findet deine Komponente - oder gibt nil zurück. Diese wird zu Btn (einem TControl) zugewiesen. Der weitere Code wird nur ausgeführt, wenn Btn tatsächlich ein TControl ist (ganz wichtig!), da Left, Top, Width und Height benötigt werden - dazu muss es ein TControl sein.

Es werden die Einstellungen zum Zeichnen gesetzt: Keine Füllung (Brush.Style = bsClear), Linienbreite 2 und rote Linie. Damit wird ein Rechteck gezeichnet (Koordinaten: obere linke und untere rechte Ecke).

Der Code dazu sieht so aus:

Delphi-Quellcode:
var
  Btn: TControl;
begin
  Btn := TControl(FindComponent('Button' + Edit1.Text));

  //if Assigned(Btn) then //nicht nötig, da (nil is TControl) = false
    if Btn is TControl then
    begin
      with canvas do
      begin
        Brush.Style := bsClear;
        with Pen do
        begin
          Width := 2;
          Color := clRed;
        end;
        Rectangle(Btn.Left-2, Btn.Top-2,
          Btn.Left + Btn.Width + 2, Btn.Top + Btn.Height + 2);
      end;
    end;
end;
Am besten als eine Methode die in OnPaint des Forms sowie beim OnChange des Edits aufgerufen wird, wobei im OnChange des Edits noch ein Repaint; stehen sollte, um die alte Markierung zu löschen.

Je nachdem, wie deine Komponenten heißen, solltest du statt Button etwas anderes schreiben (hattest du nicht 'BitBtn's?).

Mfg
FAlter

Delphiturbo 31. Mai 2008 21:11

Re: Button besonderes markieren
 
Ich habe so versucht :

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
btn: TControl;
begin
Btn := TControl(FindComponent('BitBtn' + Edit1.Text));
end;
procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

Highlight(Btn);
//Incompatible types: 'TWinControl' and 'TControl'

end;

mkinzler 31. Mai 2008 21:14

Re: Button besonderes markieren
 
Dann caste doch nach TWinControl

Delphiturbo 31. Mai 2008 21:25

Re: Button besonderes markieren
 
Zitat:

Zitat von mkinzler
Dann caste doch nach TWinControl

Stimmt, jetzt bekomme ich mindestens die Markierung
Ich muss nun die alte Markierung löschen

Wie kann ich in OnChange die alte Markierung wieder löschen, sonst werden alle
BitBtns markiert

taaktaak 31. Mai 2008 21:42

Re: Button besonderes markieren
 
Moin,Moin,
wenn du das Beispiel von FAlter verwendest: Das gleiche noch mal, nur nicht mit clRed, sondern mit der Farbe des Hintergrunds (Color vom Form, Panel ...)

Delphiturbo 31. Mai 2008 21:55

Re: Button besonderes markieren
 
ich möchte das Button markieren, wenn der Inhalt in Edit1 sich ändert
und nicht beim MouseMove:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
Highlight(Btn);
end;
Ich kan eine andere Farbe nehmen ok, aber wo soll der Code liegen, damit die alte Markierung und nicht die neue gelöscht wird?

taaktaak 31. Mai 2008 22:02

Re: Button besonderes markieren
 
Eine etwas hirnlose, aber praktikable Lösung wäre, im OnChange des Edits zuerst alle in Frage kommenden Buttons mit der original Hintergrundfarbe zu übermalen und danach die Farbe für den betreffenden Button zu malen.

Mikender 31. Mai 2008 22:05

Re: Button besonderes markieren
 
Mach zuerst Highlight mit der Hintergrundfarbe und dann Highlight mit der neuen Farbe (Ergänze die Procedure doch noch um ein Parameter :lol: )

Delphiturbo 31. Mai 2008 22:13

Re: Button besonderes markieren
 
Ich habe eine andere Funktion mit einer anderen farbe

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
Highlight(Btn);
if not Assigned(btn) then
Highlight2(Btn); //mit einer anderen farben (HG-Farbe)
end;
aber ohne Erfolg

taaktaak 31. Mai 2008 22:17

Re: Button besonderes markieren
 
Ohne das ganze wirklich nachvollziehen zu können: Du malst zuerst in rot, dann den gleichen (?!) Button noch mal in Hintergrundfarbe? Mach's doch mal, wie ich es vorgeschlagen habe. Das funktioniert auf jeden Fall.

Delphiturbo 31. Mai 2008 22:54

Re: Button besonderes markieren
 
Das habe ich schon gemacht aber die Buttons werden nicht mit der Highlight2-Farbe gefärbt !

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
Highlight2(BitBtn1);
Highlight2(BitBtn2);
Highlight2(BitBtn3);
Highlight(Btn);
end;

rollstuhlfahrer 31. Mai 2008 23:09

Re: Button besonderes markieren
 
HI,

1. hast du die richtige Farbei bei Hintergrund2 (welche eigentlich? - clBtnFace?)
2. Wird Btn aktualisiert?? (oder bleibts beim alten button?)

rollstuhlfahrer

Delphiturbo 31. Mai 2008 23:16

Re: Button besonderes markieren
 
Es funktioniert und die alte Markierung wird auch gelöscht
Das Problem die Farbe in Highlight2 spielt keine Rolle
die Farbe in Highlight2 ist nicht meine Form-HG-Farbe totzdem wird nicht angezeigt !
Delphi-Quellcode:
procedure TForm1.Highlight(Control: TWinControl);
var
  Btn: TControl;
begin
  Btn := TControl(FindComponent('BitBtn' + Edit1.Text));
   if Btn is TControl then
    begin
      with canvas do
      begin
        Brush.Style := bsClear;
        with Pen do
        begin
          Width := 2;
          Color := clRed;
        end;
        Rectangle(Btn.Left-2, Btn.Top-2,
          Btn.Left + Btn.Width + 2, Btn.Top + Btn.Height + 2);
      end;
    end;
end;


procedure TForm1.Highlight2(Control: TWinControl);
begin
  if PtInRect(GetRect(Control, ABorder), ScreenToClient(Mouse.CursorPos)) then
        Canvas.Brush.Color :=clblue // egal welche farbe !
     
  else
    Canvas.Brush.Color := clBtnFace;
       Canvas.FillRect(GetRect(Control, ABorder));
   
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Highlight2(BitBtn1);
Highlight2(BitBtn2);
Highlight2(BitBtn3);
Highlight(Btn);
end;

taaktaak 1. Jun 2008 00:35

Re: Button besonderes markieren
 
Wozu dient denn die MousePosition in Highlight2() ???? Du willst doch ein ganz bestimmtes Control, dass du als Parameter übergibst, behandeln! Lösche einfach den Quark ..

Delphi-Quellcode:
 if PtInRect(GetRect(Control, ABorder), ScreenToClient(Mouse.CursorPos)) then
        Canvas.Brush.Color :=clblue // egal welche farbe ! 
     
  else
'raus. Dann sollte es funktionieren :thumb:

Delphiturbo 1. Jun 2008 18:00

Re: Button besonderes markieren
 
Gleiche Ergebnis !

Es gibt ein anderes Problem
Objekte, die nicht direkt auf Form liegen, werden nicht markiert
Ich habe einen Panel und drauf einige Objekte angelegt. Diese werden nicht mit Hei light markiert !

Was soll mann ändern ?
ich auch so versucht:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
//Highlight(Button1);
  Highlight(Panel1.Button1);


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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