SpecDialogs

Zur Vorstellung von Komponenten und Units für Lazarus
Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

SpecDialogs

Beitrag von Ralph59 »

Hallo liebe Lazarus Gemeinde,

ich habe gerade für mich eine kleine Unit geschrieben, könnte vielleicht noch verbessert werden, läuft aber recht gut.

Mein Antrieb war, dass ich immer wieder einmal mehr als nur einen Text strukturiert auf einer Form darstellen wollte wie z.B. beim Showmessage.
Das Form wird generiert in der unit specdialogs.pas
Damit sich keiner die Mühe machen muss die unit komplett zu lesen habe ich ein kleines Form in einem Projekt erstellt, welches die specdialogs nutzt.
Ich benutze jetzt diese unit um mir z.B. folgendes anzuzeigen.

Bild

hier der Link zum Download:

Hier der Link zum Download

Wenn ihr Anregungen, oder eine bessere Variante habt, ich bin immer bereit zu lernen.

Viel Spaß beim Testen.

Ach ja, ich habe ein wenig mit Kommentaren gegeizt :oops:

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: SpecDialogs

Beitrag von corpsman »

An sich siehts cool aus, auch wenn ich gerade nicht weis wofür ich das Ding nutzen sollte.

Eine kleine Verbesserung hätte ich aber.

Es sieht so aus, als sollte dieses Ding ein Dialog sein.

Eine Option Maximieren, bzw. minimieren finde ich dann nicht angebracht.

Auch hast du keine Standard Selektierung auf den Buttons ( zumindest nicht auf dem Screenshot ), welcher Wert wird dann angenommen wenn ich auf das "X" drücke ?
--
Just try it

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: SpecDialogs

Beitrag von Ralph59 »

Hallo Corpsman,

Das Ding soll ein Dialog sein :?

Aber, wenn Deine Darzustellende Tabelle größer ist, als dein Monitor darstellen kann, dann ist es sinnvoll, das Fenster auch mal kleiner machen zu können, um etwas zu überprüfen.
Stell einfach mal das Array auf 100 Zeilen und Spalten ein, dann kannst Du verstehen, was ich meine.

Das mit dem X Drücken habe ich nicht verstanden?
Aber, wenn Du bei dem Caption des Buttons z.B. &OK einträgst, dann wird der Button mit o ausgelöst und bei O&K mitK.

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: SpecDialogs

Beitrag von MAC »

Vom bild her siehts cool aus.
Das mit dem X ist das X was oben rechts (oder links) steht und womit du dein Browser beenden kannst, das X meint der... :|

Code: Alles auswählen

Signatur := nil;

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: SpecDialogs

Beitrag von Ralph59 »

Hallo,

also, das mit dem X ist folgendermaßen:
Wenn du einen Button betätigst, dann bekommst du vom 1.-bis zum letzten Button 1..n zurück. Bei X bekommst du eine 0.


Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: SpecDialogs

Beitrag von Socke »

Ralph59 hat geschrieben:Wenn du einen Button betätigst, dann bekommst du vom 1.-bis zum letzten Button 1..n zurück. Bei X bekommst du eine 0.

Für modal (d.h. alle anderen deaktivieren) angezeigte Fenster (auch Dialoge genannt) gibt es TModalResult und einige vordefinierte Konstanten wie mrOk, mrYes, mrCancel, usw.
Wenn du diese nutzt, wird man deine Unit schneller und effizienter nutzen können, da diese schon aus der LCL und VCL bekannt sind.

Mit TBitBtn.Kind kann man vordefinierte "Arten" des TBitBtn nutzen. Damit kann man ganz schnell passende Daten einstellen (Bild passend zum Theme des Widgetsets, passender Text und passendes ModalResult).

Tut mir jetzt Leid, dir das sagen zu müssen, aber du hast dir in diesen beiden Punkten unnötig Arbeit gemacht.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: SpecDialogs

Beitrag von Ralph59 »

Hallo Socke,

du bist aber noch lange auf. :P

:!: das braucht dir doch nicht leid zu tun, ich bitte ja sogar darum, wie soll ich denn sonst lernen können, wenn nicht von euch allen :?:

Das mit den mrOk, mrYes, mrCancel, usw. halte ich für sinnvoll, und ist ja auch keine besondere Arbeit.

Aber eine Frage, kann ich den Buttons dann auch eingene Labels verpassen?
so wie Abbrechen, oder ich möchte hier jetzt..., ?

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: SpecDialogs

Beitrag von Socke »

Ralph59 hat geschrieben:du bist aber noch lange auf. :P

Leider manchmal viel zu lange....
Ralph59 hat geschrieben:Aber eine Frage, kann ich den Buttons dann auch eingene Labels verpassen?
so wie Abbrechen, oder ich möchte hier jetzt..., ?

Klar, TBitBtn setzt nur Standardwerte, die natürlich wieder verändert werden können. Wenn man zu viel verändert, kann man sich diese Zeile natürlich auch sparen.

Code: Alles auswählen

btn := TBitBtn.Create(Self)
btn.Kind := bkYes;
btn.Caption := 'Hallo';
btn.Glyph.Assign(mybitmap);
btn.ModalResult := 25;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: SpecDialogs

Beitrag von Ralph59 »

Hm,

das heißt, erstellen muß ich das Form, den optionalen Label, das Grid und die Bitbuttons eh.

Bei der Zuweisung der Buttons könnte ich der einfachheit halber und aus Verständnisgründen auf TBitBtnKind zurückgreifen

Also könnte ich die Zeile

Code: Alles auswählen

TmyButtons = (Bt_ok, Bt_Cancel, Bt_Help, Bt_Yes, Bt_No, Bt_Close, Bt_Abort, Bt_Retry, Bt_Ignore, Bt_All, Bt_YesToall, Bt_NoToAll, Bt_Unlock, Bt_User ) ;

ersatzlos streichen :!: ,

die funktionen im Aufruf ändern s.u.

Code: Alles auswählen

function ShowInfoGrid(
    const StrGridToShow: TStringStringArray;
    const myButton: Array of TBitBtnKind): integer overload;


einige kleinere Anpassungen machen und wäre zum mindest einfacher verständlich.

Kann ich das gleiche auch mit den Standard Images machen, die ich in der Form verwende?
und oder
Kann ich den ganzen kruscht, den ich da fabriziert habe verwerfen und ein standard Formular verwenden?

Wie auch immer, ich bin dankbar für diese Diskussion.

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: SpecDialogs

Beitrag von pluto »

Ich möchte ja nichts sagen, aber das "Ding" sieht für mich aus wie der OI von Lazarus. Wäre es nicht einfacher die OI Komponente von Lazarus zu nutzen? Die Verwendung ist sehr leicht.
MFG
Michael Springwald

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: SpecDialogs

Beitrag von Ralph59 »

Hallo
@Pluto
Ich möchte ja nichts sagen, aber das "Ding" sieht für mich aus wie der OI von Lazarus. Wäre es nicht einfacher die OI Komponente von Lazarus zu nutzen? Die Verwendung ist sehr leicht.


Wie wird die Komponente genutzt, oder welche unit wird verwendet, vieleicht ist es ja wirklich sinnvoller diese zu nutzen, ich kenne diese jedoch nicht.
Vielleicht hast du ja einen Link :?
ok, brauche keinen Link mehr du meintest den ObjectInspector, hm ich lese gerade mal nach.

Mit freundlichem Gruß
Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: SpecDialogs

Beitrag von pluto »

Du musst nur die RTTI Komponenten installieren oder verstehe ich den Sinn deines Dialoges nicht richtig?

Du brauchst einzelne Klassen. Dort musst du Eigenschaften Verwenden die im Published Bereich sind. Du kannst damit sogar eigene OI-Editoren erstellen. habe ich schon mal gemacht vor ca drei Jahren*G*. Beispiele findest du nur im Code vom OI.

Vielleicht kannst du diese Komponenten ja verwenden. Jedoch ist sie auch etwas "Altmodisch", wenn man sich den OI von Delphi anschaut. Ich hatte sogar mal eine eigene Angefangen es aber dann doch sein gelassen...
MFG
Michael Springwald

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: SpecDialogs

Beitrag von Ralph59 »

Hallo,

ich werde dann mal die RTTI Komponenten in meiner Testumgebung installieren.

Aber hier eine kleine Beschreibung:
Manchmal möchte ich mir einige Teile einer Tabelle oder verschiedene Informationen gleichzeitig anzeigen lassen, und dass mit einem schnellen unkomplizierten Aufruf. Das kann im geringstenfall
dann der Aufruf:

Code: Alles auswählen

ShowInfoGrid(ArrayInfo, [Bt_ok]);


kann aber auch ein zusätzliches Label oder unterschiedliche Images anzeigen.

s. hier
Bild

wobei dann der Aufruf folgendermaßen aussehen kann:

Code: Alles auswählen

i:=ShowInfoGrid('Hallo Welt, ich bin ein Text', ArrayInfo, [Bt_ok]);
if i=1 then...


Natürlich muss man das Array hier ArrayInfo erst einmal mit Daten füllen. In meinem Beispiel habe ich das mit

Code: Alles auswählen

var
cArr :Array of Array of String;
begin
  SetLength(cArr, 100);
  for i := 0 to High(cArr) do
    SetLength(cArr[i], 5);
  for i := 0 to High(cArr) do
    for y := 0 to High(cArr[i]) do
      cArr[i,y] := ' Row: ' + IntToStr(i) +', Col: ' + IntToStr(y) +' ';
...


getan.

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: SpecDialogs

Beitrag von pluto »

Sollte auch gehen. Theoretisch. Du müsstest die OI Komponente ja "nur" auf ein eigenes Dialog hinzufügen.
MFG
Michael Springwald

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: SpecDialogs

Beitrag von Ralph59 »

Hallo Pluto,

ist es dann noch sinnvoll meine Unit nicht zu nutzen?

wo bekomme ich die RTTI oder auch andere Komonenten ?
Gibt es hierfür auch eine globale SVN wie http://svn.freepascal.org/svn/lazarus/

Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Antworten