Button Gestaltung

Für Fragen von Einsteigern und Programmieranfängern...
Andy Nightingale
Beiträge: 239
Registriert: Mo 13. Jan 2025, 12:11

Re: Button Gestaltung

Beitrag von Andy Nightingale »

Danke für die vielen EInblicke. Das ist eben Erfahrung.... :D

Andy Nightingale
Beiträge: 239
Registriert: Mo 13. Jan 2025, 12:11

Re: Button Gestaltung

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Fr 2. Mai 2025, 21:50 Ich habe mir das jetzt nochmal angesehen und finde, dass meine "Quick-and-dirty"-Lösung doch nicht so ideal ist, wenn man 200 Buttons benötigt, aber vor allem, wenn diese auf veschiedenen Formularen sind. Der richtige Weg ist eine eigene Komponente für diese Aufgabe. Zum Glück ist das nicht so schwer, und ich habe im Anhang eine "TImageButton"-Komponente bereitgestellt, die ein Bild aus einer Imageliste anzeigt und auf Mouse-Over und Klicks geringfügig das Aussehen des Bilds ändert. Das beigefügte Demo-Programm funktioniert ohne Installation, aber wenn du die Komponente auf der Palette haben willst, so wie alle anderen Komponenten, musst du das Package "imagebtn_pkg" im "ImageButton"-Ordner installieren - die Komponente ist dann auf der Seite "Misc".
Hallo WP,
ich habe alle möglichen Buttons mit deinem Package gestaltet. Sah super aus. Problem ist, das wenn ich irgend etwas an den Buttons ändere, verliert jeder Button sein Bild. Auch wenn ich Compiliere dann sieht es super aus, nur wenn ich Fenster z.B. maximieren mache.....schwups sind die Buttons weg. Was läuft schief? Grüße

wp_xyz
Beiträge: 5159
Registriert: Fr 8. Apr 2011, 09:01

Re: Button Gestaltung

Beitrag von wp_xyz »

Andy Nightingale hat geschrieben: Mo 12. Mai 2025, 19:24 wenn ich irgend etwas an den Buttons ändere, verliert jeder Button sein Bild.
Was bedeutet "irgendwas" genau?

Die ImageListe wird geleert, wenn du deren Eigenschaften Width oder Height änderst. Machst du das, nachdem die Bilder reingeladen worden sind? Damit würden auch die Icons auf den Buttons verschwinden und die Buttons nicht mehr zu erkennen sein. Mache einen Doppelklick auf der ImageListe und schaue nach, ob die Bilder noch vorhanden sind, nachdem du "irgendwas" verändert hast.

Aber ohne dass du genau sagst, was du tust, kann ich nur raten.
Andy Nightingale hat geschrieben: Mo 12. Mai 2025, 19:24 Auch wenn ich Compiliere dann sieht es super aus, nur wenn ich Fenster z.B. maximieren mache.....schwups sind die Buttons weg. Was läuft schief?
Das Fenster im beigefügten Projekt kannst du maximieren, und die Buttons bleiben sichtbar.
Dateianhänge
imgbutton_demo.zip
(7 KiB) 91-mal heruntergeladen

Andy Nightingale
Beiträge: 239
Registriert: Mo 13. Jan 2025, 12:11

Re: Button Gestaltung

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Mo 12. Mai 2025, 23:21
Andy Nightingale hat geschrieben: Mo 12. Mai 2025, 19:24 wenn ich irgend etwas an den Buttons ändere, verliert jeder Button sein Bild.
Was bedeutet "irgendwas" genau?

Die ImageListe wird geleert, wenn du deren Eigenschaften Width oder Height änderst. Machst du das, nachdem die Bilder reingeladen worden sind? Damit würden auch die Icons auf den Buttons verschwinden und die Buttons nicht mehr zu erkennen sein. Mache einen Doppelklick auf der ImageListe und schaue nach, ob die Bilder noch vorhanden sind, nachdem du "irgendwas" verändert hast.

Aber ohne dass du genau sagst, was du tust, kann ich nur raten.
Andy Nightingale hat geschrieben: Mo 12. Mai 2025, 19:24 Auch wenn ich Compiliere dann sieht es super aus, nur wenn ich Fenster z.B. maximieren mache.....schwups sind die Buttons weg. Was läuft schief?
Das Fenster im beigefügten Projekt kannst du maximieren, und die Buttons bleiben sichtbar.
Hi WP,
mach mal in dein Beispiel ein TImage rein und lade ein Bild rein. Dann lösche das TImage und plötzlich sind alle Buttons weg.

wp_xyz
Beiträge: 5159
Registriert: Fr 8. Apr 2011, 09:01

Re: Button Gestaltung

Beitrag von wp_xyz »

Kann ich nicht bestätigen - siehe Anhang.

Allerdings: beim Einfügen des Lazarus-Cheetah in die Image-Komponente waren die Buttons nicht mehr zu sehen. Da liegt daran, dass ich das Bild in das Formular eingefügt hatte, nachdem dem Buttons bereits vorhanden waren -- das heißt: das TImage liegt VOR den Buttons. Rechtsklick auf dem Image, und "Z-Reihenfolge" > "Ganz nach hinten bewegen" schafft Abhilfe
Dateianhänge
imgbutton_demo-2.zip
(108.03 KiB) 66-mal heruntergeladen

wp_xyz
Beiträge: 5159
Registriert: Fr 8. Apr 2011, 09:01

Re: Button Gestaltung

Beitrag von wp_xyz »

Ah, ich sehe jetzt etwas: Wenn die TImage-Komponente selbst gelöscht wird, also nicht nur deren Inhalt, dann erhalten die Buttons eine Notification darüber, und weil sie nicht prüfen, welche Komponente gelöscht wird, setzten sie ihre Imagelist auf nil, wodurch die Icons nicht mehr angezeigt werden können.

Suche die Methode TImageButton.Notification in der uimagebutton-Unit und füge ein "AComponent = FImages" in die "if"-Bedingung ein:

Code: Alles auswählen

procedure TImageButton.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if (Operation = opRemove) and (AComponent = FImages) and Assigned(FImages) then
    FImages := nil;
end;
Damit sollte dieses Problem behoben sein.

Solche Missverständnisse lassen sich vermeiden, wenn du einfach ein kleines Projekt zusammenklickst, das den Fehler zeigt, und hier hochlädst.

Andy Nightingale
Beiträge: 239
Registriert: Mo 13. Jan 2025, 12:11

Re: Button Gestaltung

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Di 13. Mai 2025, 14:54 Ah, ich sehe jetzt etwas: Wenn die TImage-Komponente selbst gelöscht wird, also nicht nur deren Inhalt, dann erhalten die Buttons eine Notification darüber, und weil sie nicht prüfen, welche Komponente gelöscht wird, setzten sie ihre Imagelist auf nil, wodurch die Icons nicht mehr angezeigt werden können.

Suche die Methode TImageButton.Notification in der uimagebutton-Unit und füge ein "AComponent = FImages" in die "if"-Bedingung ein:

Code: Alles auswählen

procedure TImageButton.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if (Operation = opRemove) and (AComponent = FImages) and Assigned(FImages) then
    FImages := nil;
end;
Damit sollte dieses Problem behoben sein.

Solche Missverständnisse lassen sich vermeiden, wenn du einfach ein kleines Projekt zusammenklickst, das den Fehler zeigt, und hier hochlädst.
Hallo Wp.- erst einmal Danke.
Ich verstehe was du meinst.- aber ich habe im Grunde ja nicht viel gemacht. Da braucht man kein Beispiel. Also nichts programmiert und nur deine Buttons hochgeladen. Leider funktioniert die Abänderung nicht.
Das Problem ist folgendes. Ich arbeite daran alles aufzubauen. Im Moment eben nur diese Buttons. Stell dir vor du machst dann einzelne Komponenten auf deine Form1 und du denkst .- achne ich nehme eine andere usw. Dann löscht du diese und schwups sind deine Buttons wieder weg. Du kannst jede Komponente nehmen.-egal welche. Das passiert bei jeder Komponente. Bei anderen Komponenten passiert das nicht. Das hat nichts mit Missverständnisse zu tun. Ich habe ja noch nichts programmiert. Hier stimmt grundsätzlich was nicht. Du kannst dies einfach mit deinem Demo nachvollziehen. Ich habe nun mehrere "Minibeispiele gemacht.- immer das Gleiche. komponente Grid...immer Buttons weg. Könnte das vielleicht ein Speicherproblem sein? Muß man vielleicht sagen.- hey du Button du bist nun ausgewählt und speichern....oder so?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6795
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Button Gestaltung

Beitrag von af0815 »

Wenn ich eine Komponente lösche, die von einer anderen Komponente verwendet wird, so kann man nur auf nil setzen (Rücksetzen) und auf nichts anderes. Wenn man jetzt was neues auf das Formular klatscht, so muss man die Referenzen neu setzen. Da gibt es "No way out".
Wie soll die IDE erschnüffeln was du da gerade verbrichst. Und wenn du jetzt den Einwand hast, das dann bei 200 Komponenten hast, so sage ich dir, überdenk dein Layout. Weil bei vielen Komponenten auf der Form wäre ein dynamisches Layout zur Laufzeit anzudenken.

Man kann Komponenten die ähnlich sind auch mit der IDE austauschen, dann Versucht die IDE die vorhandenen Eigenschaften zu übernehmen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Andy Nightingale
Beiträge: 239
Registriert: Mo 13. Jan 2025, 12:11

Re: Button Gestaltung

Beitrag von Andy Nightingale »

af0815 hat geschrieben: Di 13. Mai 2025, 18:03 Wenn ich eine Komponente lösche, die von einer anderen Komponente verwendet wird, so kann man nur auf nil setzen (Rücksetzen) und auf nichts anderes. Wenn man jetzt was neues auf das Formular klatscht, so muss man die Referenzen neu setzen. Da gibt es "No way out".
Wie soll die IDE erschnüffeln was du da gerade verbrichst. Und wenn du jetzt den Einwand hast, das dann bei 200 Komponenten hast, so sage ich dir, überdenk dein Layout. Weil bei vielen Komponenten auf der Form wäre ein dynamisches Layout zur Laufzeit anzudenken.

Man kann Komponenten die ähnlich sind auch mit der IDE austauschen, dann Versucht die IDE die vorhandenen Eigenschaften zu übernehmen.
Hallo 0815,
Nein so ist es ja nicht. Ich bin ja noch im Testmodus. Es geht lediglich um ein zwei "normale" Komponenten. Ich verstehe dich oft nicht was du meinst.
Was meinst du mit: so muss man die Referenzen neu setzen...
was meinst du mit: Man kann Komponenten die ähnlich sind auch mit der IDE austauschen...
Ich habe bis jetzt nur Komponenten von der IDE benutzt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6795
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Button Gestaltung

Beitrag von af0815 »

Wenn ich eine TImage lösche, dann wird überall wo diese TImage verwendet wird, statt der Komponente ein nil hinterlegt.

Diese Auswahl ist im Hintergrund nicht anders als eine Referenz (Querverweis). Das ist damit gemeint.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 5159
Registriert: Fr 8. Apr 2011, 09:01

Re: Button Gestaltung

Beitrag von wp_xyz »

Andy Nightingale hat geschrieben: Di 13. Mai 2025, 17:30 aber ich habe im Grunde ja nicht viel gemacht. Da braucht man kein Beispiel.
Klar, *du* brauchst kein Beispiel, für dich ist die Sachlage klar. Aber für mich nicht. Du hast geschrieben: "mach mal in dein Beispiel ein TImage rein und lade ein Bild rein. Dann lösche das TImage und plötzlich sind alle Buttons weg." Was heißt: "Lösche das TImage"? Lösche die Komponente aus dem Formular? Oder lösche nur das Bild aus der Komponente? Ich hatte zuerst letzteres verstanden. Das sind sehr wohl Missverständnisse, die zu eigentlich unnötigen Nachfragen führen.
Andy Nightingale hat geschrieben: Di 13. Mai 2025, 17:30 Leider funktioniert die Abänderung nicht.
Das ist auch wieder so eine Aussage. "Funktioniert nicht" kann alles bedeuten. Meinst du, dass die Button-Icons immer noch verschwinden, wenn du das TImage entfernst? Und welche "Abänderung"? Die Änderung in der Notification-Methode? In meinem eigenen Test-Programm (siehe Anhang) funktioniert es. Hast du nach der Änderung der Notification-Methode die IDE neu kompiliert? Wenn nicht, weiß die IDE nicht, dass das Verhalten der Komponente geändert worden ist. Grundregel: Immer wenn Code einer Komponente geändert wird, der zur Entwurfszeit aufgerufen wird, muss vorher die IDE neu gebaut werden. Und um ganz sicher zu gehen mache eine "saubere" Neukompilierung: "Werkzeuge" > "Lazarus kompilieren einrichten" > in der Box "Aufräumen" die Felder "Alles aufräumen" und "Nach Neukompilierung zu automatisch wechseln" markieren > "Neu kompilieren" klicken.

Zur Sicherheit hänge ich in "imagebtn_pkg.zip" die Package-Dateien nochmal an. Einfach in das Verzeichnis auspacken, in dem du bisher die Komponente gespeichert hast, und so die Dateien dort ersetzen. Und dann neu kompilieren, wie oben beschrieben.
Dateianhänge
imagebtn_pkg.zip
(5.09 KiB) 117-mal heruntergeladen
imgbutton_demo-3.zip
(108.09 KiB) 120-mal heruntergeladen

Andy Nightingale
Beiträge: 239
Registriert: Mo 13. Jan 2025, 12:11

Re: Button Gestaltung

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Di 13. Mai 2025, 19:44
Andy Nightingale hat geschrieben: Di 13. Mai 2025, 17:30 aber ich habe im Grunde ja nicht viel gemacht. Da braucht man kein Beispiel.
Klar, *du* brauchst kein Beispiel, für dich ist die Sachlage klar. Aber für mich nicht. Du hast geschrieben: "mach mal in dein Beispiel ein TImage rein und lade ein Bild rein. Dann lösche das TImage und plötzlich sind alle Buttons weg." Was heißt: "Lösche das TImage"? Lösche die Komponente aus dem Formular? Oder lösche nur das Bild aus der Komponente? Ich hatte zuerst letzteres verstanden. Das sind sehr wohl Missverständnisse, die zu eigentlich unnötigen Nachfragen führen.
Andy Nightingale hat geschrieben: Di 13. Mai 2025, 17:30 Leider funktioniert die Abänderung nicht.
Das ist auch wieder so eine Aussage. "Funktioniert nicht" kann alles bedeuten. Meinst du, dass die Button-Icons immer noch verschwinden, wenn du das TImage entfernst? Und welche "Abänderung"? Die Änderung in der Notification-Methode? In meinem eigenen Test-Programm (siehe Anhang) funktioniert es. Hast du nach der Änderung der Notification-Methode die IDE neu kompiliert? Wenn nicht, weiß die IDE nicht, dass das Verhalten der Komponente geändert worden ist. Grundregel: Immer wenn Code einer Komponente geändert wird, der zur Entwurfszeit aufgerufen wird, muss vorher die IDE neu gebaut werden. Und um ganz sicher zu gehen mache eine "saubere" Neukompilierung: "Werkzeuge" > "Lazarus kompilieren einrichten" > in der Box "Aufräumen" die Felder "Alles aufräumen" und "Nach Neukompilierung zu automatisch wechseln" markieren > "Neu kompilieren" klicken.

Zur Sicherheit hänge ich in "imagebtn_pkg.zip" die Package-Dateien nochmal an. Einfach in das Verzeichnis auspacken, in dem du bisher die Komponente gespeichert hast, und so die Dateien dort ersetzen. Und dann neu kompilieren, wie oben beschrieben.
Entschuldige das ich mich falsch ausgedrückt habe. Ich bin eben noch nicht so in der Materie wie du. Danke dir. Ich werde mich wegen dieser Sache nicht mehr melden. Ich wollte einfach das erklären wie ich es in meiner Arbeit sehe. Ich bitte dich einfach einmal darüber nachzudenken wo du noch Anfänger warst. Anscheinend klappt ja alles bei dir. Bei mir war es eben nicht so. Aber wenn ja alles funktioniert dann werde ich mich nicht mehr melden. Danke für deine Mühe.

wp_xyz
Beiträge: 5159
Registriert: Fr 8. Apr 2011, 09:01

Re: Button Gestaltung

Beitrag von wp_xyz »

Jetzt sei doch nicht angepisst. Ich will nur klarstellen, dass manche Fragen einfacher zu beantworten wären, wenn die Poster sich klar machen würden, dass der Antwortende keine Ahnung von der Problemstellung hat
Aber wenn ja alles funktioniert dann werde ich mich nicht mehr melden.
Aber wenn du alles zum Laufen gebracht hat und dich dann nicht mehr meldest, dann lässt du mich im Regen stehen.

Andy Nightingale
Beiträge: 239
Registriert: Mo 13. Jan 2025, 12:11

Re: Button Gestaltung

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Mi 14. Mai 2025, 00:36 Jetzt sei doch nicht angepisst. Ich will nur klarstellen, dass manche Fragen einfacher zu beantworten wären, wenn die Poster sich klar machen würden, dass der Antwortende keine Ahnung von der Problemstellung hat
Aber wenn ja alles funktioniert dann werde ich mich nicht mehr melden.
Aber wenn du alles zum Laufen gebracht hat und dich dann nicht mehr meldest, dann lässt du mich im Regen stehen.
Also nochmal. Ich habe nur die Beispiele benutzt die du mir gegeben hast. Ohne Programmierung. Du sagtest. Ich brauche ein Beispiel von dir da du ja nicht weist was ich programmiert habe. Ich habe mehrfach gesagt das ich nichts programmiert habe sondern nur das benutzt habe was du mir gegeben hast.- einfach um das ganze zu testen. Du hast dann immer nach einem Beispiel gefragt. Ich habe stets das gemacht was du gesagt hast.- das war alles. Ich bin zwar ein Anfänger.- aber nicht blöd. Ich kann ja nichts dafür das es bei mir eben nicht funktioniert.- da nützt auch nicht das du mir ständig sagst.- ähhh aber bei mir funktioniert es. Ich muß alles in meiner Situation erst testen bevor ich es wirklich alles umsetzen kann. Ich muß alles in ein paar Wochen von meinem alten Programm ins Lazarus umgesetzt haben. Bevor ich aber das kann muß ich jeden einzelnen Schritt testen. Mehr mache ich im Moment nicht. Wenn es bei mir funktioniert dann sage ich dir bescheid.- ich lasse dich nicht im Regen stehen. :D

Andy Nightingale
Beiträge: 239
Registriert: Mo 13. Jan 2025, 12:11

Re: Button Gestaltung

Beitrag von Andy Nightingale »

af0815 hat geschrieben: Di 13. Mai 2025, 19:26 Wenn ich eine TImage lösche, dann wird überall wo diese TImage verwendet wird, statt der Komponente ein nil hinterlegt.

Diese Auswahl ist im Hintergrund nicht anders als eine Referenz (Querverweis). Das ist damit gemeint.
Hallo 0815,
was meinst du mit: Man kann Komponenten die ähnlich sind auch mit der IDE austauschen.?
Grüße

Antworten