AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi OnMouseDown Methode hinzufügen->Label wird per Code erstellt
Thema durchsuchen
Ansicht
Themen-Optionen

OnMouseDown Methode hinzufügen->Label wird per Code erstellt

Ein Thema von Danyel · begonnen am 27. Mär 2010 · letzter Beitrag vom 28. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
Danyel

Registriert seit: 7. Okt 2009
Ort: Lübeck
15 Beiträge
 
Delphi 5 Standard
 
#1

OnMouseDown Methode hinzufügen->Label wird per Code erste

  Alt 27. Mär 2010, 16:41
Hi,
dies ist meine erste Frage und ich hoffe ich bin hier richtig.
Falls es schon Themen dieser Art geben sollte, entschuldige ich mich.
Gefunden habe ich nemlich keine und welche Suchbegriffe ich verwenden
könnte ist mir auch nicht ganz klar.

Ich möchte bei Labels, die zur Laufzeit erstellt werden, die
OnMouseDown Methode hinzufügen.

Delphi-Quellcode:
MyLabel:=TLabel.Create(Form3);
            with MyLabel do
            begin
                  ProcessPath(memo1.Lines[i], laufwerk, verzeichnisse, datei);
                  Caption:=datei;
                  Name:='label'+IntToStr(i);
                  left:=15;
                  top:=10+i*13;
                  width:=10;
                  height:=10;
                  visible:=true;
                  parent:=form3;
            end;
So lasse ich mir meine Labels erstellen und dies funktioniert einwandfrei.
Doch wie kann ich jetzt die besagte Methode hinzufügen?
Ich brauche die Methode, um die Labels später per Maus verschieben zu können, so wie
es in der Entwicklungszeit möglich ist.

Ich benutze Delphi 2005 und bin Schüler der Emil-Possehl-Schule, ich hoffe, dass ihr
alle Infos habt und mir helfen könnt.
Vielen Dank schonmal
Mit freundlichen Grüßen Danyel S.
Auch wenn am Ende dein Programm nicht läuft,
so bist mit dem Weg gewachsen und nichts war
umsonst!
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#2

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 27. Mär 2010, 17:57
Ich mache das bei einer Sprachenanzeige so:

Delphi-Quellcode:
  for Idx := 0 to Cnt - 1 do begin
      NewItem:= TMenuItem.Create(Self);
      NewItem.Caption:=LanguagesSL[Idx];
      NewItem.Tag:=Idx;
      NewItem.OnClick:=SelLanguage;
      LanguageSprache1.Add(NewItem); //Sprachen an Menueintrag dranhängen
    end;
Du mußt nur OnClick in OnMouseDown ändern und dann die entsprechende Prozedur erstellen, die dann das macht, was du willst.
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#3

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 27. Mär 2010, 18:59
Hallo,

... das Ganze für Buttons (ist aber im Prinzip genau das Gleiche) :

controls per arrays verwalten und / oder erstellen
Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#4

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 27. Mär 2010, 19:52
BTW:

Erst einmal herzlich willkommen in der DP.

Gruss und schönes Wochende

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#5

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 27. Mär 2010, 20:07
Zitat von Wolfgang Mix:
BTW:

Erst einmal herzlich willkommen in der DP.

Gruss und schönes Wochende

Wolfgang
[Edit] PS: Hier bist du auf jeden Fall richtig
OOPS verklickt, sorry [/Edit]
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Danyel

Registriert seit: 7. Okt 2009
Ort: Lübeck
15 Beiträge
 
Delphi 5 Standard
 
#6

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 27. Mär 2010, 21:01

oh man ^^
Da hätt ich auch selber draufkommen können, vielen dank.
hmm aber mir war mal so, dass wenn ich selbst die Proceduren geschrieben hatte,
die nicht erkannt worden, sondern erst nachdem ich diese durch doppelklicken bei dem
bestimmten Ereigniss hinzugefügt hatte. Naja, wie dem auch sein, ich werde es sofort testen
und noch mal vielen Dank für die schnellen Antworten.
Wenn es interessiert kann ich mein Projekt auch gerne mal vorstellen.
MfG Danyel S.



EDIT:
hmm also ich habe das nun folgendermaßen hinzugefügt:

Delphi-Quellcode:
for i:=0 to memo1.Lines.Count-1 do
       begin
            MyLabel:=TLabel.Create(Form3);
            with MyLabel do
            begin
                  ProcessPath(memo1.Lines[i], laufwerk, verzeichnisse, datei);
                  Caption:=datei;
                  Name:='label'+IntToStr(i);
                  left:=15;
                  top:=10+i*13;
                  width:=10;
                  height:=10;
                  visible:=true;
                  parent:=form3;
                  onmousedown;
                  onmouseup;
                  onmousemove;
            end;
       end;
Wenn ich auf Form3 nun aber die procedure dafür erstellen möchte mit:
Delphi-Quellcode:
procedure mylabel.onmousedown;
begin
      move:=true;
end;
oder

Delphi-Quellcode:
procedure label1.onmousedown;
begin
      move:=true;
end;
zeigt er mir mylabel oder halt label1 rot an, da diese im moment logischerweise nicht
existieren. Entweder bin ich zu doof oder einfach inzwischen zu Müde, aber im Moment habe
ich keine Ideen mehr.
Für erneute Hilfe wäre ich dankbar, denn wenn das klappt, ist mein Programm zu 99% fertig.

EDIT2
ich bin glaube ich echt zu müde, habe meinen vermutlichen Fehler gefunden.
Muss den On-Ereignissen ja eigene Proceduren zuweisen ^^

Delphi-Quellcode:
for i:=0 to memo1.Lines.Count-1 do
       begin
            MyLabel:=TLabel.Create(Form3);
            with MyLabel do
            begin
                  ProcessPath(memo1.Lines[i], laufwerk, verzeichnisse, datei);
                  Caption:=datei;
                  Name:='label'+IntToStr(i);
                  left:=15;
                  top:=10+i*13;
                  width:=10;
                  height:=10;
                  visible:=true;
                  parent:=form3;
                  onmousedown:=aktivieren;
                  onmouseup:=deaktivieren;
                  onmousemove;
            end;
       end;
       end;
end;

procedure TForm3.aktivieren(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
      move:=true;
end;
Anscheind bin ich zu doof, die Proceduren dafür zum Laufen zu bekommen
Auch wenn am Ende dein Programm nicht läuft,
so bist mit dem Weg gewachsen und nichts war
umsonst!
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#7

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 27. Mär 2010, 22:17
Deinem letzten Codeschnipsel nach hast Du ja das Prinzip soweit erkannt. Ansonsten einfach nochmal mit einem zur Entwurfszeit plazierten Label anschauen.
Alle deine Label rufen jetzt natürlich das gleiche "Aktivieren" und auch das gleiche "MouseMove" auf. Hä wie jetzt - und dann.. dann gibt es da diesen seltsamen Parameter "Sender" - und der hilft.
Wenn eines der Label den Event auslöst, dann übergibt es als Sender "self", der Sender gibt also immer das Label an welches gerade angeklickt wurde. Mit "(Sender as TLabel).TopLeft" kannst Du dann beispielsweise die Position verändern.
Tipp: Die momentanen globalen Mauskoordinaten Mouse.Cursorpos im Verhältnis zu denen beim Aktivieren verraten Dir welche Bewegung stattfand. Dich interessiert also vermutlich viel mehr "MoveAbWo" als "Move=True".

Grüsse, Dirk
  Mit Zitat antworten Zitat
Danyel

Registriert seit: 7. Okt 2009
Ort: Lübeck
15 Beiträge
 
Delphi 5 Standard
 
#8

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 28. Mär 2010, 22:38
Ah danke, vielen dank.
Werd mich nochmal genauer mit den Sendern beschäftigen und es die Tage weiter probieren,
wenn der Klausurstress vorbei ist.
Und nein, von wo die Bewegung stattfindet ist eig relativ egal, denn sobald man auf
das Label klickt, wird move auf true gesetzt. Wenn move auf true gesetzt ist, dann
wird die labelposition zusammen mit der Maus bewegt.
Sobald ich es geschafft, oder andere Fragen habe, melde ich mich.
Bis dahin noch nen schönen Abend.


PS Damit es zu keinen Missverständnissen kommt:
Ich möchte die erstellten Labels während der Laufzeit mit der Maus
bewegen, dazu soll beim OnMouseDown eine Variable, in meinem Fall
MOVE auf TRUE gesetzt werden. Beim OnMouseMove werden die LEFT und
TOP Werte mit denen der Maus vergrößert oder verkleinert. Dies
geschieht aber nur bei gedrückter Maustaste (MOVE=TRUE). Beim
OnMouseUp soll MOVE wieder auf FALSE gesetzt werden.

EDIT
Wenn ich es wie Zeras vorgeschlagen hatte mache und eine Procedure
unten dranhänge und oben bei der Labelerstellung der OnMouseDown Procedure
meine eigene zuweise, dann zeigt er mir diese rot an und sagt dass diese
nicht vorhanden ist.

EDIT
So, endlich konnte ich weitere Tests machen, doch verliefen diese nicht
nach meinen Vorstellungen.
Ich habe mir das Thema angeguckt wo durch ein Array Buttons erzeugt
werden und muss zugeben, dass ich dort nicht alles verstehe. Das mit den
Sendern ist mir noch nicht gänzlich schlüssig.
Bin ich richtig in der Annahme, dass ich eine eigene Variable für den
Sender erstellen muss, so wie es in dem Thema zu sehen ist?
Muss ich beim Erstellen der Labels dieser Variable etwas zuweisen?
Wenn ja was? Aber da macht sich in mir die Vermutung breit, dass das nicht
funktionieren kann, da die Variable dann nur auf das zuletzt erstellte
Label bezug hat, da durch dieses die Variable zuletzt geändert wurde.
Momentan bin ich auf dem Holzweg und mir scheint, als ob ich das Brett vor
dem Kopf nicht allzu schnell wegbekommen werde. Ich wäre sehr dankbar, wenn
mir jemand eine etwas genauere Erklärung oder andere, ähnliche Themen liefern
könnte.
Hmm ich überlege gerade die Erstellung der Labels mit einem Array zu verbinden,
dh, dass erst die Anzahl der zu erstellenden Labels überprüft wird und somit
die Endgrenze des Arrays festgelegt wird, ist das sinnvoll das so umzubauen?
Danke euch für eure Geduld mit mir
Auch wenn am Ende dein Programm nicht läuft,
so bist mit dem Weg gewachsen und nichts war
umsonst!
  Mit Zitat antworten Zitat
Danyel

Registriert seit: 7. Okt 2009
Ort: Lübeck
15 Beiträge
 
Delphi 5 Standard
 
#9

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 8. Apr 2010, 12:16
Ich hoffe, dass es in Ordnung ist, dass ich einen Doppelpost mache, da meine letzte Antwort bereits so lang ist.
Nochmal zum Verständnis.
Kann ich in jeder Procedure herausfinden, von wem diese aufgerufen wurde?

Das MOVE auf TRUE gesetzt wird, soll bei jedem erstellten Label passieren via OnMouseDown.
Beim OnMouseMove soll die Veränderung nur bei dem Label auftreten, welches diese Procedure
aufgerufen hat. Bin ich also richtig in der Annahme, dass ich in der besagten Procedure
herausfinden kann, wer diese aufgerufen hat?
Wie funktioniert dies? Komme grad gedanklich nicht weiter.
Auch wenn am Ende dein Programm nicht läuft,
so bist mit dem Weg gewachsen und nichts war
umsonst!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: OnMouseDown Methode hinzufügen->Label wird per Code e

  Alt 8. Apr 2010, 12:18
Bei Event-Methoden ja ( Parameter Sender)
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:14 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